diff --git a/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl
index 0a9bfe5..4d65af3 100644
--- a/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/002533.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_002533(tint_module_vars_struct tint_module_vars) {
+float4 abs_002533() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_002533(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_002533(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_002533();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_002533(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_002533();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_002533();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl
index 03736a3..6d3816f 100644
--- a/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/005174.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_005174(tint_module_vars_struct tint_module_vars) {
+float3 abs_005174() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_005174(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_005174(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_005174();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_005174(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_005174();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_005174();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl
index 8a40309..79492df 100644
--- a/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/1ce782.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_1ce782(tint_module_vars_struct tint_module_vars) {
+uint4 abs_1ce782() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_1ce782(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_1ce782(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_1ce782();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_1ce782(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_1ce782();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_1ce782();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl
index 808d1f1..df30fc2 100644
--- a/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/1e9d53.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_1e9d53(tint_module_vars_struct tint_module_vars) {
+float2 abs_1e9d53() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_1e9d53(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_1e9d53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_1e9d53();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_1e9d53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_1e9d53();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_1e9d53();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.ir.msl
index ab69ecf..1a15fa6 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_2f861b() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  abs_2f861b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_2f861b();
 }
 kernel void compute_main() {
   abs_2f861b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_2f861b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl
index f6d7c1d..c1f8db1 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_421ca3(tint_module_vars_struct tint_module_vars) {
+half3 abs_421ca3() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_421ca3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_421ca3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_421ca3();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_421ca3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_421ca3();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_421ca3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl
index 122ea33..e376e01 100644
--- a/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/467cd1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_467cd1(tint_module_vars_struct tint_module_vars) {
+uint abs_467cd1() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_467cd1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_467cd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_467cd1();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_467cd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_467cd1();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_467cd1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl
index 7266d2b..0a0a23c 100644
--- a/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/4ad288.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_4ad288(tint_module_vars_struct tint_module_vars) {
+int abs_4ad288() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_4ad288(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_4ad288(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_4ad288();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_4ad288(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_4ad288();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_4ad288();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl
index ada0d3a..83a92c1 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_538d29(tint_module_vars_struct tint_module_vars) {
+half4 abs_538d29() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_538d29(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_538d29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_538d29();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_538d29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_538d29();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_538d29();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.ir.msl
index 5b6836d..ef8fe9a 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_577d6e() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  abs_577d6e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_577d6e();
 }
 kernel void compute_main() {
   abs_577d6e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_577d6e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.ir.msl
index 1f03064..9c7799e 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_5a8af1() {
   int res = 1;
 }
-float4 vertex_main_inner() {
-  abs_5a8af1();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_5a8af1();
 }
 kernel void compute_main() {
   abs_5a8af1();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_5a8af1();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl
index bb165b7..13fa036 100644
--- a/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/5ad50a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_5ad50a(tint_module_vars_struct tint_module_vars) {
+int3 abs_5ad50a() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_5ad50a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_5ad50a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_5ad50a();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_5ad50a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_5ad50a();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_5ad50a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl
index a455d83..daccddb 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_5ae4fe(tint_module_vars_struct tint_module_vars) {
+half2 abs_5ae4fe() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_5ae4fe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_5ae4fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_5ae4fe();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_5ae4fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_5ae4fe();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_5ae4fe();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl
index cab1b02..2ad16a5 100644
--- a/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/7326de.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_7326de(tint_module_vars_struct tint_module_vars) {
+uint3 abs_7326de() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_7326de(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_7326de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_7326de();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_7326de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_7326de();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_7326de();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl
index 54c9749..e6bbfda 100644
--- a/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/7f28e6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_7f28e6(tint_module_vars_struct tint_module_vars) {
+uint2 abs_7f28e6() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_7f28e6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_7f28e6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_7f28e6();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_7f28e6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_7f28e6();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_7f28e6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl
index dbacc46..1296d64 100644
--- a/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/7faa9e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_7faa9e(tint_module_vars_struct tint_module_vars) {
+int2 abs_7faa9e() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_7faa9e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_7faa9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_7faa9e();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_7faa9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_7faa9e();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_7faa9e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.ir.msl
index 6ac76e1..fc8b3b1 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_82ff9d() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  abs_82ff9d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_82ff9d();
 }
 kernel void compute_main() {
   abs_82ff9d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_82ff9d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.ir.msl
index 2837b6e..f0fa540 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_8ca9b1() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  abs_8ca9b1();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_8ca9b1();
 }
 kernel void compute_main() {
   abs_8ca9b1();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_8ca9b1();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl
index 196c092..96c55ac 100644
--- a/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/9c80a6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_9c80a6(tint_module_vars_struct tint_module_vars) {
+int4 abs_9c80a6() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_9c80a6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_9c80a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_9c80a6();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_9c80a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_9c80a6();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_9c80a6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.ir.msl
index 7563887..61482e6 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_aedb6d() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  abs_aedb6d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_aedb6d();
 }
 kernel void compute_main() {
   abs_aedb6d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_aedb6d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl
index 2225d53..5742162 100644
--- a/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/b96037.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_b96037(tint_module_vars_struct tint_module_vars) {
+float abs_b96037() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_b96037(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_b96037(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_b96037();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_b96037(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_b96037();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_b96037();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.ir.msl
index 179e6ca..39a80c3 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_c3321c() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  abs_c3321c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_c3321c();
 }
 kernel void compute_main() {
   abs_c3321c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_c3321c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.ir.msl
index 8ebc260..158510c 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void abs_e28785() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  abs_e28785();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   abs_e28785();
 }
 kernel void compute_main() {
   abs_e28785();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  abs_e28785();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl
index 473bcdf..340d078 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void abs_fd247f(tint_module_vars_struct tint_module_vars) {
+half abs_fd247f() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  abs_fd247f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_fd247f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_fd247f();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  abs_fd247f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = abs_fd247f();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = abs_fd247f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl
index 7cc531f..ae4f57f 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_004aff(tint_module_vars_struct tint_module_vars) {
+half2 acos_004aff() {
   half2 res = half2(0.25048828125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_004aff(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_004aff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_004aff();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_004aff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_004aff();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_004aff();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/069188.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/069188.wgsl.expected.ir.msl
index 73b5f97..bb0b19d 100644
--- a/test/tint/builtins/gen/literal/acos/069188.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/069188.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acos_069188() {
   float3 res = float3(0.25f);
 }
-float4 vertex_main_inner() {
-  acos_069188();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acos_069188();
 }
 kernel void compute_main() {
   acos_069188();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acos_069188();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acos/15d35b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/15d35b.wgsl.expected.ir.msl
index 4b4306a..ad7b1ae 100644
--- a/test/tint/builtins/gen/literal/acos/15d35b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/15d35b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acos_15d35b() {
   float2 res = float2(0.25f);
 }
-float4 vertex_main_inner() {
-  acos_15d35b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acos_15d35b();
 }
 kernel void compute_main() {
   acos_15d35b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acos_15d35b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl
index 0c53774..f760b91 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_203628(tint_module_vars_struct tint_module_vars) {
+half4 acos_203628() {
   half4 res = half4(0.25048828125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_203628(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_203628(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_203628();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_203628(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_203628();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_203628();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl
index 88f1a52..d461e63 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_303e3d(tint_module_vars_struct tint_module_vars) {
+half acos_303e3d() {
   half res = 0.25048828125h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_303e3d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_303e3d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_303e3d();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_303e3d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_303e3d();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_303e3d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl
index 8a41d81..0959665 100644
--- a/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/489247.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_489247(tint_module_vars_struct tint_module_vars) {
+float acos_489247() {
   float res = 0.25f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_489247(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_489247(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_489247();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_489247(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_489247();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_489247();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/4dac75.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/4dac75.wgsl.expected.ir.msl
index 6447da8..0b12092 100644
--- a/test/tint/builtins/gen/literal/acos/4dac75.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/4dac75.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acos_4dac75() {
   float4 res = float4(0.25f);
 }
-float4 vertex_main_inner() {
-  acos_4dac75();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acos_4dac75();
 }
 kernel void compute_main() {
   acos_4dac75();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acos_4dac75();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acos/5e9ad2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/5e9ad2.wgsl.expected.ir.msl
index 7bd272f..4a2f514 100644
--- a/test/tint/builtins/gen/literal/acos/5e9ad2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/5e9ad2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acos_5e9ad2() {
   float res = 0.25f;
 }
-float4 vertex_main_inner() {
-  acos_5e9ad2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acos_5e9ad2();
 }
 kernel void compute_main() {
   acos_5e9ad2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acos_5e9ad2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl
index 739e7ce..7253d1f 100644
--- a/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/8e2acf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_8e2acf(tint_module_vars_struct tint_module_vars) {
+float4 acos_8e2acf() {
   float4 res = float4(0.25f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_8e2acf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_8e2acf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_8e2acf();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_8e2acf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_8e2acf();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_8e2acf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl
index 33dad9e..c26fd96 100644
--- a/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/a610c4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_a610c4(tint_module_vars_struct tint_module_vars) {
+float3 acos_a610c4() {
   float3 res = float3(0.25f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_a610c4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_a610c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_a610c4();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_a610c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_a610c4();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_a610c4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl
index 5757e94..4dd9263 100644
--- a/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/dfc915.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_dfc915(tint_module_vars_struct tint_module_vars) {
+float2 acos_dfc915() {
   float2 res = float2(0.25f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_dfc915(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_dfc915(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_dfc915();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_dfc915(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_dfc915();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_dfc915();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl
index 3913acb..4c3458f 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acos_f47057(tint_module_vars_struct tint_module_vars) {
+half3 acos_f47057() {
   half3 res = half3(0.25048828125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acos_f47057(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_f47057(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_f47057();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acos_f47057(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acos_f47057();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acos_f47057();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/17260e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/17260e.wgsl.expected.ir.msl
index 257dd4e..86a0c19 100644
--- a/test/tint/builtins/gen/literal/acosh/17260e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/17260e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acosh_17260e() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  acosh_17260e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acosh_17260e();
 }
 kernel void compute_main() {
   acosh_17260e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acosh_17260e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/3433e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/3433e8.wgsl.expected.ir.msl
index e1cead1..6d363c5 100644
--- a/test/tint/builtins/gen/literal/acosh/3433e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/3433e8.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acosh_3433e8() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  acosh_3433e8();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acosh_3433e8();
 }
 kernel void compute_main() {
   acosh_3433e8();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acosh_3433e8();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/490aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/490aae.wgsl.expected.ir.msl
index 51f3f8d..3f7f091 100644
--- a/test/tint/builtins/gen/literal/acosh/490aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/490aae.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acosh_490aae() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  acosh_490aae();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acosh_490aae();
 }
 kernel void compute_main() {
   acosh_490aae();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acosh_490aae();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl
index 812fe83..44c0f6e 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_5f49d8(tint_module_vars_struct tint_module_vars) {
+half2 acosh_5f49d8() {
   half2 res = half2(0.99951171875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_5f49d8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_5f49d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_5f49d8();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_5f49d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_5f49d8();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_5f49d8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl
index 5592c11..f8a2a34 100644
--- a/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/640883.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_640883(tint_module_vars_struct tint_module_vars) {
+float2 acosh_640883() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_640883(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_640883(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_640883();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_640883(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_640883();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_640883();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/9f213e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/9f213e.wgsl.expected.ir.msl
index 6ea70a4..9a13447 100644
--- a/test/tint/builtins/gen/literal/acosh/9f213e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/9f213e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void acosh_9f213e() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  acosh_9f213e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   acosh_9f213e();
 }
 kernel void compute_main() {
   acosh_9f213e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  acosh_9f213e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl
index 1d47f83..28ecdba 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_a37dfe(tint_module_vars_struct tint_module_vars) {
+half acosh_a37dfe() {
   half res = 0.99951171875h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_a37dfe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_a37dfe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_a37dfe();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_a37dfe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_a37dfe();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_a37dfe();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl
index 1c5816b..0a6824e 100644
--- a/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/d51ccb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_d51ccb(tint_module_vars_struct tint_module_vars) {
+float4 acosh_d51ccb() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_d51ccb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_d51ccb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_d51ccb();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_d51ccb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_d51ccb();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_d51ccb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl
index b2d3e51..dd24cc0 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_de60d8(tint_module_vars_struct tint_module_vars) {
+half4 acosh_de60d8() {
   half4 res = half4(0.99951171875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_de60d8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_de60d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_de60d8();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_de60d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_de60d8();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_de60d8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl
index aa18e55..e557982 100644
--- a/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/e38f5c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_e38f5c(tint_module_vars_struct tint_module_vars) {
+float3 acosh_e38f5c() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_e38f5c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_e38f5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_e38f5c();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_e38f5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_e38f5c();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_e38f5c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl
index 2b6c1fe..0c961d0 100644
--- a/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/ecf2d1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_ecf2d1(tint_module_vars_struct tint_module_vars) {
+float acosh_ecf2d1() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_ecf2d1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_ecf2d1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_ecf2d1();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_ecf2d1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_ecf2d1();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_ecf2d1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl
index f833e19..418b13e 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void acosh_f56574(tint_module_vars_struct tint_module_vars) {
+half3 acosh_f56574() {
   half3 res = half3(0.99951171875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  acosh_f56574(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_f56574(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_f56574();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  acosh_f56574(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = acosh_f56574();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = acosh_f56574();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
index 2115582..32c27e2 100644
--- a/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/353d6a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void all_353d6a(tint_module_vars_struct tint_module_vars) {
+int all_353d6a() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  all_353d6a(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_353d6a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_353d6a();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_353d6a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_353d6a();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = all_353d6a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
index 8f1429f..84a3ac3 100644
--- a/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/986c7b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void all_986c7b(tint_module_vars_struct tint_module_vars) {
+int all_986c7b() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  all_986c7b(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_986c7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_986c7b();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_986c7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_986c7b();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = all_986c7b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
index c409cab..671d1ba 100644
--- a/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/bd2dba.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void all_bd2dba(tint_module_vars_struct tint_module_vars) {
+int all_bd2dba() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  all_bd2dba(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_bd2dba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_bd2dba();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_bd2dba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_bd2dba();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = all_bd2dba();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
index 0b9af7d..db07e7c 100644
--- a/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/all/f46790.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void all_f46790(tint_module_vars_struct tint_module_vars) {
+int all_f46790() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  all_f46790(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_f46790(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_f46790();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  all_f46790(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = all_f46790();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = all_f46790();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
index 323aff1..ae4d33c 100644
--- a/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/083428.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void any_083428(tint_module_vars_struct tint_module_vars) {
+int any_083428() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  any_083428(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_083428(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_083428();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_083428(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_083428();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = any_083428();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
index 7d24654..51e856a 100644
--- a/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/0e3e58.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void any_0e3e58(tint_module_vars_struct tint_module_vars) {
+int any_0e3e58() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  any_0e3e58(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_0e3e58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_0e3e58();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_0e3e58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_0e3e58();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = any_0e3e58();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
index 50fca5d..9392b2f 100644
--- a/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/2ab91a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void any_2ab91a(tint_module_vars_struct tint_module_vars) {
+int any_2ab91a() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  any_2ab91a(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_2ab91a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_2ab91a();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_2ab91a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_2ab91a();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = any_2ab91a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
index 91d5080..0a1b24a 100644
--- a/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/any/e755c1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void any_e755c1(tint_module_vars_struct tint_module_vars) {
+int any_e755c1() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  any_e755c1(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_e755c1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_e755c1();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  any_e755c1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = any_e755c1();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = any_e755c1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl
index 7d67192..f859a85 100644
--- a/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_1588cd(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_1588cd(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 4u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_1588cd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_1588cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_1588cd(tint_module_vars);
 }
 kernel void compute_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_1588cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_1588cd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_1588cd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl
index d569950..26c56a3 100644
--- a/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_61b1c7(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_61b1c7(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 4u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_61b1c7(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_61b1c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_61b1c7(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_61b1c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_61b1c7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_61b1c7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl
index e6afb58..4229282 100644
--- a/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_8421b9(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_8421b9(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 2u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_8421b9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_8421b9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_8421b9(tint_module_vars);
 }
 kernel void compute_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_8421b9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_8421b9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_8421b9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl
index 204ba53..3be2fcd 100644
--- a/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_a0f5ca(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_a0f5ca(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 4u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_a0f5ca(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_a0f5ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_a0f5ca(tint_module_vars);
 }
 kernel void compute_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_a0f5ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_a0f5ca(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_a0f5ca(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl
index b610bef..f014263 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_cbd6b5(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_cbd6b5(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 2u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_cbd6b5(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_cbd6b5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_cbd6b5(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_cbd6b5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_cbd6b5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_cbd6b5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl
index 2fa85f7..2960dce 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_cdd123(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_cdd123(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 4u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_cdd123(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_cdd123(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_cdd123(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_cdd123(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_cdd123(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_cdd123(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl
index 351baa5..5dbb1de 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_cfca0a(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_cfca0a(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 4u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_cfca0a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_cfca0a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_cfca0a(tint_module_vars);
 }
 kernel void compute_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_cfca0a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_cfca0a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_cfca0a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(const device SB_RO* sb_ro [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_ro=sb_ro, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl
index 96cda01..1734aeb 100644
--- a/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.msl
@@ -20,27 +20,35 @@
   device uint* prevent_dce;
   const constant tint_array<uint4, 1>* tint_storage_buffer_sizes;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void arrayLength_eb510f(tint_module_vars_struct tint_module_vars) {
+uint arrayLength_eb510f(tint_module_vars_struct tint_module_vars) {
   uint res = (((*tint_module_vars.tint_storage_buffer_sizes)[0u][0u] - 0u) / 4u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  arrayLength_eb510f(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_eb510f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_eb510f(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  arrayLength_eb510f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = arrayLength_eb510f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = arrayLength_eb510f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(device SB_RW* sb_rw [[buffer(1)]], const constant tint_array<uint4, 1>* tint_storage_buffer_sizes) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .tint_storage_buffer_sizes=tint_storage_buffer_sizes};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl
index 4c6d8ec..694cf7b 100644
--- a/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/064953.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_064953(tint_module_vars_struct tint_module_vars) {
+float4 asin_064953() {
   float4 res = float4(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_064953(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_064953(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_064953();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_064953(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_064953();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_064953();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/0bac07.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/0bac07.wgsl.expected.ir.msl
index 51b3968..245bf53 100644
--- a/test/tint/builtins/gen/literal/asin/0bac07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/0bac07.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asin_0bac07() {
   float3 res = float3(0.5f);
 }
-float4 vertex_main_inner() {
-  asin_0bac07();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asin_0bac07();
 }
 kernel void compute_main() {
   asin_0bac07();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asin_0bac07();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl
index ab71209..feb0d67 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_11dfda(tint_module_vars_struct tint_module_vars) {
+half asin_11dfda() {
   half res = 0.499755859375h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_11dfda(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_11dfda(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_11dfda();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_11dfda(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_11dfda();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_11dfda();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl
index f1b09c0..a8f4df1 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_2d8e29(tint_module_vars_struct tint_module_vars) {
+half3 asin_2d8e29() {
   half3 res = half3(0.499755859375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_2d8e29(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_2d8e29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_2d8e29();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_2d8e29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_2d8e29();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_2d8e29();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl
index f93fff7..6ca49b2 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_3cfbd4(tint_module_vars_struct tint_module_vars) {
+half4 asin_3cfbd4() {
   half4 res = half4(0.499755859375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_3cfbd4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_3cfbd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_3cfbd4();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_3cfbd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_3cfbd4();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_3cfbd4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/64bb1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/64bb1f.wgsl.expected.ir.msl
index 8444ecb..2d395bc 100644
--- a/test/tint/builtins/gen/literal/asin/64bb1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/64bb1f.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asin_64bb1f() {
   float4 res = float4(0.5f);
 }
-float4 vertex_main_inner() {
-  asin_64bb1f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asin_64bb1f();
 }
 kernel void compute_main() {
   asin_64bb1f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asin_64bb1f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl
index f6b4da7..8f190954 100644
--- a/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/7b6a44.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_7b6a44(tint_module_vars_struct tint_module_vars) {
+float2 asin_7b6a44() {
   float2 res = float2(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_7b6a44(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_7b6a44(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_7b6a44();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_7b6a44(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_7b6a44();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_7b6a44();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl
index 65fae2c..3580698 100644
--- a/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/8cd9c9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_8cd9c9(tint_module_vars_struct tint_module_vars) {
+float3 asin_8cd9c9() {
   float3 res = float3(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_8cd9c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_8cd9c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_8cd9c9();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_8cd9c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_8cd9c9();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_8cd9c9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/a5dd88.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/a5dd88.wgsl.expected.ir.msl
index 978d217..2b5b714 100644
--- a/test/tint/builtins/gen/literal/asin/a5dd88.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/a5dd88.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asin_a5dd88() {
   float2 res = float2(0.5f);
 }
-float4 vertex_main_inner() {
-  asin_a5dd88();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asin_a5dd88();
 }
 kernel void compute_main() {
   asin_a5dd88();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asin_a5dd88();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asin/a6d73a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/a6d73a.wgsl.expected.ir.msl
index 333f767..9a3fedd 100644
--- a/test/tint/builtins/gen/literal/asin/a6d73a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/a6d73a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asin_a6d73a() {
   float res = 0.5f;
 }
-float4 vertex_main_inner() {
-  asin_a6d73a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asin_a6d73a();
 }
 kernel void compute_main() {
   asin_a6d73a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asin_a6d73a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl
index 5ed4046..de67a8c 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_b4aced(tint_module_vars_struct tint_module_vars) {
+half2 asin_b4aced() {
   half2 res = half2(0.499755859375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_b4aced(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_b4aced(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_b4aced();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_b4aced(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_b4aced();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_b4aced();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl
index 8031e22..8af078f 100644
--- a/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asin/c0c272.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asin_c0c272(tint_module_vars_struct tint_module_vars) {
+float asin_c0c272() {
   float res = 0.5f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asin_c0c272(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_c0c272(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_c0c272();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asin_c0c272(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asin_c0c272();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asin_c0c272();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl
index 89310be..3bce6eb 100644
--- a/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/157447.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_157447(tint_module_vars_struct tint_module_vars) {
+float asinh_157447() {
   float res = 0.88137358427047729492f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_157447(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_157447(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_157447();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_157447(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_157447();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_157447();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.ir.msl
index cf46978..24f55ee 100644
--- a/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asinh_16b543() {
   float2 res = float2(0.88137358427047729492f);
 }
-float4 vertex_main_inner() {
-  asinh_16b543();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asinh_16b543();
 }
 kernel void compute_main() {
   asinh_16b543();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asinh_16b543();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.ir.msl
index a96bdc5..f03a4b0 100644
--- a/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asinh_180015() {
   float res = 0.88137358427047729492f;
 }
-float4 vertex_main_inner() {
-  asinh_180015();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asinh_180015();
 }
 kernel void compute_main() {
   asinh_180015();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asinh_180015();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl
index ae29361..9acd5a3 100644
--- a/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/2265ee.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_2265ee(tint_module_vars_struct tint_module_vars) {
+float3 asinh_2265ee() {
   float3 res = float3(0.88137358427047729492f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_2265ee(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_2265ee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_2265ee();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_2265ee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_2265ee();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_2265ee();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl
index defcf93..0b59d04 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_468a48(tint_module_vars_struct tint_module_vars) {
+half asinh_468a48() {
   half res = 0.88134765625h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_468a48(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_468a48(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_468a48();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_468a48(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_468a48();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_468a48();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl
index bfd60bb..ab3e9f9 100644
--- a/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/4a2226.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_4a2226(tint_module_vars_struct tint_module_vars) {
+float2 asinh_4a2226() {
   float2 res = float2(0.88137358427047729492f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_4a2226(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_4a2226(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_4a2226();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_4a2226(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_4a2226();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_4a2226();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.ir.msl
index 6f10b66..1b046d9 100644
--- a/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asinh_51079e() {
   float3 res = float3(0.88137358427047729492f);
 }
-float4 vertex_main_inner() {
-  asinh_51079e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asinh_51079e();
 }
 kernel void compute_main() {
   asinh_51079e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asinh_51079e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl
index a92709f..7b2f8df 100644
--- a/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/8d2e51.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_8d2e51(tint_module_vars_struct tint_module_vars) {
+float4 asinh_8d2e51() {
   float4 res = float4(0.88137358427047729492f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_8d2e51(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_8d2e51(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_8d2e51();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_8d2e51(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_8d2e51();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_8d2e51();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl
index 8aac302..9d0654f 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_95ab2b(tint_module_vars_struct tint_module_vars) {
+half4 asinh_95ab2b() {
   half4 res = half4(0.88134765625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_95ab2b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_95ab2b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_95ab2b();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_95ab2b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_95ab2b();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_95ab2b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl
index 43c14c5..2fc3e98 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_ad8f8b(tint_module_vars_struct tint_module_vars) {
+half2 asinh_ad8f8b() {
   half2 res = half2(0.88134765625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_ad8f8b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_ad8f8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_ad8f8b();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_ad8f8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_ad8f8b();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_ad8f8b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.ir.msl
index 85497c6..8fa2595 100644
--- a/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void asinh_cf8603() {
   float4 res = float4(0.88137358427047729492f);
 }
-float4 vertex_main_inner() {
-  asinh_cf8603();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   asinh_cf8603();
 }
 kernel void compute_main() {
   asinh_cf8603();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  asinh_cf8603();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl
index 348daea..9a5cd0b 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void asinh_fb5e8c(tint_module_vars_struct tint_module_vars) {
+half3 asinh_fb5e8c() {
   half3 res = half3(0.88134765625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  asinh_fb5e8c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_fb5e8c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_fb5e8c();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  asinh_fb5e8c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = asinh_fb5e8c();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = asinh_fb5e8c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl
index d43feae..b2dc0db 100644
--- a/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/02979a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_02979a(tint_module_vars_struct tint_module_vars) {
+float atan_02979a() {
   float res = 0.78539818525314331055f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_02979a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_02979a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_02979a();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_02979a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_02979a();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_02979a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl
index c3f0512..e542d27 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_19faea(tint_module_vars_struct tint_module_vars) {
+half4 atan_19faea() {
   half4 res = half4(0.78515625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_19faea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_19faea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_19faea();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_19faea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_19faea();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_19faea();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl
index 0916966..72a0d33 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_1e1764(tint_module_vars_struct tint_module_vars) {
+half2 atan_1e1764() {
   half2 res = half2(0.78515625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_1e1764(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_1e1764(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_1e1764();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_1e1764(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_1e1764();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_1e1764();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl
index 0486279..5d74b4d 100644
--- a/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/331e6d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_331e6d(tint_module_vars_struct tint_module_vars) {
+float3 atan_331e6d() {
   float3 res = float3(0.78539818525314331055f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_331e6d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_331e6d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_331e6d();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_331e6d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_331e6d();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_331e6d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.ir.msl
index 5f1af61..8b53540 100644
--- a/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan_5ca7b8() {
   float2 res = float2(0.78539818525314331055f);
 }
-float4 vertex_main_inner() {
-  atan_5ca7b8();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan_5ca7b8();
 }
 kernel void compute_main() {
   atan_5ca7b8();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan_5ca7b8();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.ir.msl
index 8008611..d814cf6 100644
--- a/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan_749e1b() {
   float3 res = float3(0.78539818525314331055f);
 }
-float4 vertex_main_inner() {
-  atan_749e1b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan_749e1b();
 }
 kernel void compute_main() {
   atan_749e1b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan_749e1b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.ir.msl
index 1265fb2..35c83a5 100644
--- a/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan_7a2a75() {
   float res = 0.78539818525314331055f;
 }
-float4 vertex_main_inner() {
-  atan_7a2a75();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan_7a2a75();
 }
 kernel void compute_main() {
   atan_7a2a75();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan_7a2a75();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl
index 5439867..cdfcd58f1 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_a5f421(tint_module_vars_struct tint_module_vars) {
+half3 atan_a5f421() {
   half3 res = half3(0.78515625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_a5f421(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_a5f421(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_a5f421();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_a5f421(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_a5f421();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_a5f421();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl
index c5956dd..f6a103b 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_a7ba61(tint_module_vars_struct tint_module_vars) {
+half atan_a7ba61() {
   half res = 0.78515625h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_a7ba61(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_a7ba61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_a7ba61();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_a7ba61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_a7ba61();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_a7ba61();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl
index d9b5c34..bb69dd9 100644
--- a/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/a8b696.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_a8b696(tint_module_vars_struct tint_module_vars) {
+float4 atan_a8b696() {
   float4 res = float4(0.78539818525314331055f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_a8b696(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_a8b696(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_a8b696();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_a8b696(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_a8b696();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_a8b696();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl
index 44637ec..146365c 100644
--- a/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/ad96e4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan_ad96e4(tint_module_vars_struct tint_module_vars) {
+float2 atan_ad96e4() {
   float2 res = float2(0.78539818525314331055f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan_ad96e4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_ad96e4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_ad96e4();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan_ad96e4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan_ad96e4();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan_ad96e4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.ir.msl
index aeb5e7b..d5aea37 100644
--- a/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan_d17fb2() {
   float4 res = float4(0.78539818525314331055f);
 }
-float4 vertex_main_inner() {
-  atan_d17fb2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan_d17fb2();
 }
 kernel void compute_main() {
   atan_d17fb2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan_d17fb2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.ir.msl
index f21f9a4..4e0395b 100644
--- a/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan2_034ace() {
   float res = 0.78539818525314331055f;
 }
-float4 vertex_main_inner() {
-  atan2_034ace();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan2_034ace();
 }
 kernel void compute_main() {
   atan2_034ace();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan2_034ace();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl
index 09182e7..7f9efca 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_21dfea(tint_module_vars_struct tint_module_vars) {
+half3 atan2_21dfea() {
   half3 res = half3(0.78515625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_21dfea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_21dfea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_21dfea();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_21dfea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_21dfea();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_21dfea();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.ir.msl
index 1380e1e..37d4603 100644
--- a/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan2_3c2865() {
   float3 res = float3(0.78539818525314331055f);
 }
-float4 vertex_main_inner() {
-  atan2_3c2865();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan2_3c2865();
 }
 kernel void compute_main() {
   atan2_3c2865();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan2_3c2865();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl
index 0386c4a..984d3d2 100644
--- a/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/57fb13.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_57fb13(tint_module_vars_struct tint_module_vars) {
+float2 atan2_57fb13() {
   float2 res = float2(0.78539818525314331055f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_57fb13(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_57fb13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_57fb13();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_57fb13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_57fb13();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_57fb13();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl
index 02e6dcf..705fb8e 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_93febc(tint_module_vars_struct tint_module_vars) {
+half2 atan2_93febc() {
   half2 res = half2(0.78515625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_93febc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_93febc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_93febc();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_93febc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_93febc();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_93febc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl
index 373e252..a0903a0 100644
--- a/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/96057c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_96057c(tint_module_vars_struct tint_module_vars) {
+float atan2_96057c() {
   float res = 0.78539818525314331055f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_96057c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_96057c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_96057c();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_96057c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_96057c();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_96057c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl
index ba6dec3..d5b535a 100644
--- a/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/a70d0d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_a70d0d(tint_module_vars_struct tint_module_vars) {
+float3 atan2_a70d0d() {
   float3 res = float3(0.78539818525314331055f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_a70d0d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_a70d0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_a70d0d();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_a70d0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_a70d0d();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_a70d0d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl
index 5c7e907..b061d37 100644
--- a/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/ae713e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_ae713e(tint_module_vars_struct tint_module_vars) {
+float4 atan2_ae713e() {
   float4 res = float4(0.78539818525314331055f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_ae713e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_ae713e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_ae713e();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_ae713e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_ae713e();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_ae713e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.ir.msl
index b880c41..45fca84 100644
--- a/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan2_c19683() {
   float2 res = float2(0.78539818525314331055f);
 }
-float4 vertex_main_inner() {
-  atan2_c19683();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan2_c19683();
 }
 kernel void compute_main() {
   atan2_c19683();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan2_c19683();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.ir.msl
index 2d93d9b..eb8efa6 100644
--- a/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atan2_c4be45() {
   float4 res = float4(0.78539818525314331055f);
 }
-float4 vertex_main_inner() {
-  atan2_c4be45();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atan2_c4be45();
 }
 kernel void compute_main() {
   atan2_c4be45();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atan2_c4be45();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl
index 525cded..4a3ea2d 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_ca698e(tint_module_vars_struct tint_module_vars) {
+half atan2_ca698e() {
   half res = 0.78515625h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_ca698e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_ca698e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_ca698e();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_ca698e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_ca698e();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_ca698e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl
index 5a8d715..c957a08 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atan2_d983ab(tint_module_vars_struct tint_module_vars) {
+half4 atan2_d983ab() {
   half4 res = half4(0.78515625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atan2_d983ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_d983ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_d983ab();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atan2_d983ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atan2_d983ab();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atan2_d983ab();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl
index 0393d06..75cd687 100644
--- a/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/440cca.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_440cca(tint_module_vars_struct tint_module_vars) {
+float3 atanh_440cca() {
   float3 res = float3(0.54930615425109863281f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_440cca(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_440cca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_440cca();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_440cca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_440cca();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_440cca();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl
index 693f88e..12ecda6 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_5bf88d(tint_module_vars_struct tint_module_vars) {
+half2 atanh_5bf88d() {
   half2 res = half2(0.548828125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_5bf88d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_5bf88d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_5bf88d();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_5bf88d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_5bf88d();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_5bf88d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/70d5bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/70d5bd.wgsl.expected.ir.msl
index 18c0e5f..7224d42 100644
--- a/test/tint/builtins/gen/literal/atanh/70d5bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/70d5bd.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atanh_70d5bd() {
   float2 res = float2(0.54930615425109863281f);
 }
-float4 vertex_main_inner() {
-  atanh_70d5bd();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atanh_70d5bd();
 }
 kernel void compute_main() {
   atanh_70d5bd();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atanh_70d5bd();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl
index f00d1b1..f7ed2e5 100644
--- a/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/7997d8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_7997d8(tint_module_vars_struct tint_module_vars) {
+float atanh_7997d8() {
   float res = 0.54930615425109863281f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_7997d8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_7997d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_7997d8();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_7997d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_7997d8();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_7997d8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/7f2874.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/7f2874.wgsl.expected.ir.msl
index baf18ad..2a36b72 100644
--- a/test/tint/builtins/gen/literal/atanh/7f2874.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/7f2874.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atanh_7f2874() {
   float3 res = float3(0.54930615425109863281f);
 }
-float4 vertex_main_inner() {
-  atanh_7f2874();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atanh_7f2874();
 }
 kernel void compute_main() {
   atanh_7f2874();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atanh_7f2874();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl
index 342d6f9..959fdd5 100644
--- a/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/c0e634.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_c0e634(tint_module_vars_struct tint_module_vars) {
+float2 atanh_c0e634() {
   float2 res = float2(0.54930615425109863281f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_c0e634(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_c0e634(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_c0e634();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_c0e634(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_c0e634();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_c0e634();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/c5dc32.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/c5dc32.wgsl.expected.ir.msl
index 28b7a56..ea93c4d 100644
--- a/test/tint/builtins/gen/literal/atanh/c5dc32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/c5dc32.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atanh_c5dc32() {
   float res = 0.54930615425109863281f;
 }
-float4 vertex_main_inner() {
-  atanh_c5dc32();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atanh_c5dc32();
 }
 kernel void compute_main() {
   atanh_c5dc32();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atanh_c5dc32();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl
index e95394f..d2e5260 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_d2d8cd(tint_module_vars_struct tint_module_vars) {
+half atanh_d2d8cd() {
   half res = 0.548828125h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_d2d8cd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_d2d8cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_d2d8cd();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_d2d8cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_d2d8cd();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_d2d8cd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl
index f4a75a4..f90205d 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_e3b450(tint_module_vars_struct tint_module_vars) {
+half4 atanh_e3b450() {
   half4 res = half4(0.548828125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_e3b450(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_e3b450(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_e3b450();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_e3b450(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_e3b450();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_e3b450();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/e431bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/e431bb.wgsl.expected.ir.msl
index 8d160d4..83cb7e2 100644
--- a/test/tint/builtins/gen/literal/atanh/e431bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/e431bb.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void atanh_e431bb() {
   float4 res = float4(0.54930615425109863281f);
 }
-float4 vertex_main_inner() {
-  atanh_e431bb();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   atanh_e431bb();
 }
 kernel void compute_main() {
   atanh_e431bb();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  atanh_e431bb();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl
index 99d6c94..db44c42 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_ec4b06(tint_module_vars_struct tint_module_vars) {
+half3 atanh_ec4b06() {
   half3 res = half3(0.548828125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_ec4b06(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_ec4b06(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_ec4b06();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_ec4b06(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_ec4b06();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_ec4b06();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl
index 2ce0736..60466cb 100644
--- a/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atanh/f3e01b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void atanh_f3e01b(tint_module_vars_struct tint_module_vars) {
+float4 atanh_f3e01b() {
   float4 res = float4(0.54930615425109863281f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  atanh_f3e01b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_f3e01b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_f3e01b();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  atanh_f3e01b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atanh_f3e01b();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = atanh_f3e01b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
index 96b7560..be7ecba 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/794055.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicAdd_794055(tint_module_vars_struct tint_module_vars) {
+int atomicAdd_794055(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_add_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicAdd_794055(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAdd_794055(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl
index 1e9eb4a..4d5e8a7 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/8a199a.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicAdd_8a199a(tint_module_vars_struct tint_module_vars) {
+uint atomicAdd_8a199a(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_add_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAdd_8a199a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAdd_8a199a(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAdd_8a199a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAdd_8a199a(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl
index cf6a465..719dbe3 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d32fe4.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicAdd_d32fe4(tint_module_vars_struct tint_module_vars) {
+int atomicAdd_d32fe4(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_add_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAdd_d32fe4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAdd_d32fe4(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAdd_d32fe4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAdd_d32fe4(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
index 0706c9c..fbb5ce8 100644
--- a/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAdd/d5db1d.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicAdd_d5db1d(tint_module_vars_struct tint_module_vars) {
+uint atomicAdd_d5db1d(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_add_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicAdd_d5db1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAdd_d5db1d(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl
index 88fa134..9eb6773 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/152966.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicAnd_152966(tint_module_vars_struct tint_module_vars) {
+int atomicAnd_152966(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_and_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAnd_152966(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAnd_152966(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAnd_152966(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAnd_152966(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
index c2ee90a..bc300c7 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/34edd3.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicAnd_34edd3(tint_module_vars_struct tint_module_vars) {
+uint atomicAnd_34edd3(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_and_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicAnd_34edd3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAnd_34edd3(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
index 37ab510..67ebf35 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/45a819.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicAnd_45a819(tint_module_vars_struct tint_module_vars) {
+int atomicAnd_45a819(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_and_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicAnd_45a819(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAnd_45a819(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl
index a48102e..6b6e7d9 100644
--- a/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicAnd/85a8d9.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicAnd_85a8d9(tint_module_vars_struct tint_module_vars) {
+uint atomicAnd_85a8d9(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_and_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAnd_85a8d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAnd_85a8d9(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicAnd_85a8d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicAnd_85a8d9(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
index 3146619..ac5c842 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/0a5dca.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicExchange_0a5dca(tint_module_vars_struct tint_module_vars) {
+uint atomicExchange_0a5dca(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_exchange_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicExchange_0a5dca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicExchange_0a5dca(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl
index 4f08905..ffe6b1f 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/d59712.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicExchange_d59712(tint_module_vars_struct tint_module_vars) {
+uint atomicExchange_d59712(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_exchange_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicExchange_d59712(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicExchange_d59712(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicExchange_d59712(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicExchange_d59712(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
index c234a47..4305d55 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/e114ba.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicExchange_e114ba(tint_module_vars_struct tint_module_vars) {
+int atomicExchange_e114ba(tint_module_vars_struct tint_module_vars) {
   int res = atomic_exchange_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicExchange_e114ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicExchange_e114ba(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl
index c85dbe8..3fd307b 100644
--- a/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicExchange/f2e22f.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicExchange_f2e22f(tint_module_vars_struct tint_module_vars) {
+int atomicExchange_f2e22f(tint_module_vars_struct tint_module_vars) {
   int res = atomic_exchange_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicExchange_f2e22f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicExchange_f2e22f(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicExchange_f2e22f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicExchange_f2e22f(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl
index baed38d..1467511 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/0806ad.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicLoad_0806ad(tint_module_vars_struct tint_module_vars) {
+int atomicLoad_0806ad(tint_module_vars_struct tint_module_vars) {
   int res = atomic_load_explicit((&(*tint_module_vars.sb_rw).arg_0), memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicLoad_0806ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicLoad_0806ad(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicLoad_0806ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicLoad_0806ad(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
index f4620b3..2ad33d8 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/361bf1.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicLoad_361bf1(tint_module_vars_struct tint_module_vars) {
+uint atomicLoad_361bf1(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_load_explicit(tint_module_vars.arg_0, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicLoad_361bf1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicLoad_361bf1(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
index a06cda4..f4a8734 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/afcc03.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicLoad_afcc03(tint_module_vars_struct tint_module_vars) {
+int atomicLoad_afcc03(tint_module_vars_struct tint_module_vars) {
   int res = atomic_load_explicit(tint_module_vars.arg_0, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicLoad_afcc03(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicLoad_afcc03(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl
index 2e72caf..552e0c7 100644
--- a/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicLoad/fe6cc3.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicLoad_fe6cc3(tint_module_vars_struct tint_module_vars) {
+uint atomicLoad_fe6cc3(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_load_explicit((&(*tint_module_vars.sb_rw).arg_0), memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicLoad_fe6cc3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicLoad_fe6cc3(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicLoad_fe6cc3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicLoad_fe6cc3(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl
index 5fabec6..b4fb27c 100644
--- a/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/51b9be.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicMax_51b9be(tint_module_vars_struct tint_module_vars) {
+uint atomicMax_51b9be(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_max_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMax_51b9be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMax_51b9be(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMax_51b9be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMax_51b9be(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl
index 03576f0..7d070b6 100644
--- a/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/92aa72.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicMax_92aa72(tint_module_vars_struct tint_module_vars) {
+int atomicMax_92aa72(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_max_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMax_92aa72(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMax_92aa72(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMax_92aa72(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMax_92aa72(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
index a2b8c53..7e588e2 100644
--- a/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/a89cc3.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicMax_a89cc3(tint_module_vars_struct tint_module_vars) {
+int atomicMax_a89cc3(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_max_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicMax_a89cc3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMax_a89cc3(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
index 7e55d71..a11dd9b 100644
--- a/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMax/beccfc.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicMax_beccfc(tint_module_vars_struct tint_module_vars) {
+uint atomicMax_beccfc(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_max_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicMax_beccfc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMax_beccfc(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
index 9214fa3..09b0279 100644
--- a/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/278235.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicMin_278235(tint_module_vars_struct tint_module_vars) {
+int atomicMin_278235(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_min_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicMin_278235(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMin_278235(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
index 981529a..71a36b6 100644
--- a/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/69d383.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicMin_69d383(tint_module_vars_struct tint_module_vars) {
+uint atomicMin_69d383(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_min_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicMin_69d383(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMin_69d383(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl
index 5531069..c3c4a1b 100644
--- a/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/8e38dc.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicMin_8e38dc(tint_module_vars_struct tint_module_vars) {
+int atomicMin_8e38dc(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_min_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMin_8e38dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMin_8e38dc(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMin_8e38dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMin_8e38dc(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl
index 50ba089..3c3c851 100644
--- a/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicMin/c67a74.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicMin_c67a74(tint_module_vars_struct tint_module_vars) {
+uint atomicMin_c67a74(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_min_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMin_c67a74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMin_c67a74(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicMin_c67a74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicMin_c67a74(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
index 0f55fd4..cf81467 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e3d61.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicOr_5e3d61(tint_module_vars_struct tint_module_vars) {
+uint atomicOr_5e3d61(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_or_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicOr_5e3d61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicOr_5e3d61(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl
index 59acb1f..648f49f 100644
--- a/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/5e95d4.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicOr_5e95d4(tint_module_vars_struct tint_module_vars) {
+uint atomicOr_5e95d4(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_or_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicOr_5e95d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicOr_5e95d4(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicOr_5e95d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicOr_5e95d4(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl
index a8b57c2..1d3b32b 100644
--- a/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/8d96a0.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicOr_8d96a0(tint_module_vars_struct tint_module_vars) {
+int atomicOr_8d96a0(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_or_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicOr_8d96a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicOr_8d96a0(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicOr_8d96a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicOr_8d96a0(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
index 8ba19c1..31a4f67 100644
--- a/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicOr/d09248.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicOr_d09248(tint_module_vars_struct tint_module_vars) {
+int atomicOr_d09248(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_or_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicOr_d09248(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicOr_d09248(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl
index 3ec4016..fba9f84 100644
--- a/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/051100.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicSub_051100(tint_module_vars_struct tint_module_vars) {
+int atomicSub_051100(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_sub_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicSub_051100(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicSub_051100(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicSub_051100(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicSub_051100(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
index 651592e..43a508a 100644
--- a/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/0d26c2.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicSub_0d26c2(tint_module_vars_struct tint_module_vars) {
+uint atomicSub_0d26c2(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_sub_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicSub_0d26c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicSub_0d26c2(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl
index 8c4df51..2ea0027 100644
--- a/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/15bfc9.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicSub_15bfc9(tint_module_vars_struct tint_module_vars) {
+uint atomicSub_15bfc9(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_sub_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicSub_15bfc9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicSub_15bfc9(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicSub_15bfc9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicSub_15bfc9(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
index 26c3e6d..7e50537 100644
--- a/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicSub/77883a.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicSub_77883a(tint_module_vars_struct tint_module_vars) {
+int atomicSub_77883a(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_sub_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicSub_77883a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicSub_77883a(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl
index d3ceb96..94a0b9b 100644
--- a/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/54510e.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device uint* prevent_dce;
 };
 
-void atomicXor_54510e(tint_module_vars_struct tint_module_vars) {
+uint atomicXor_54510e(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_xor_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicXor_54510e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicXor_54510e(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device uint* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicXor_54510e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicXor_54510e(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
index 6d70394..056e9455 100644
--- a/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/75dc95.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_int tint_symbol;
 };
 
-void atomicXor_75dc95(tint_module_vars_struct tint_module_vars) {
+int atomicXor_75dc95(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_xor_explicit(tint_module_vars.arg_0, 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicXor_75dc95(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicXor_75dc95(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl
index 17bcc96..f5516a4 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/c1b78c.wgsl.expected.ir.msl
@@ -8,15 +8,15 @@
   device int* prevent_dce;
 };
 
-void atomicXor_c1b78c(tint_module_vars_struct tint_module_vars) {
+int atomicXor_c1b78c(tint_module_vars_struct tint_module_vars) {
   int res = atomic_fetch_xor_explicit((&(*tint_module_vars.sb_rw).arg_0), 1, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
-fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+fragment void fragment_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicXor_c1b78c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicXor_c1b78c(tint_module_vars);
 }
-kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]], device int* prevent_dce [[buffer(1)]]) {
+kernel void compute_main(device SB_RW* sb_rw [[buffer(1)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw, .prevent_dce=prevent_dce};
-  atomicXor_c1b78c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicXor_c1b78c(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
index 45298f3..4328ea0 100644
--- a/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/atomicXor/c8e6be.wgsl.expected.ir.msl
@@ -8,16 +8,16 @@
   atomic_uint tint_symbol;
 };
 
-void atomicXor_c8e6be(tint_module_vars_struct tint_module_vars) {
+uint atomicXor_c8e6be(tint_module_vars_struct tint_module_vars) {
   uint res = atomic_fetch_xor_explicit(tint_module_vars.arg_0, 1u, memory_order_relaxed);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     atomic_store_explicit(tint_module_vars.arg_0, 0u, memory_order_relaxed);
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  atomicXor_c8e6be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = atomicXor_c8e6be(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl
index 540ad6e..3bc756b 100644
--- a/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/0fe0c9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_0fe0c9(tint_module_vars_struct tint_module_vars) {
+float3 bitcast_0fe0c9() {
   float3 res = float3(1.40129846e-45f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_0fe0c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_0fe0c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_0fe0c9();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_0fe0c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_0fe0c9();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_0fe0c9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl
index 510cc67..a45deb9 100644
--- a/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/160c09.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_160c09(tint_module_vars_struct tint_module_vars) {
+uint4 bitcast_160c09() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_160c09(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_160c09(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_160c09();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_160c09(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_160c09();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_160c09();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl
index eaba458..46b8d91 100644
--- a/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/16cba4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_16cba4(tint_module_vars_struct tint_module_vars) {
+int bitcast_16cba4() {
   int res = 1065353216;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_16cba4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_16cba4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_16cba4();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_16cba4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_16cba4();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_16cba4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl
index 77a88e7..37e9e64 100644
--- a/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/1c3b31.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_1c3b31(tint_module_vars_struct tint_module_vars) {
+uint2 bitcast_1c3b31() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_1c3b31(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_1c3b31(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_1c3b31();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_1c3b31(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_1c3b31();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_1c3b31();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl
index 455cd3e..87fdf33 100644
--- a/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/1df11f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_1df11f(tint_module_vars_struct tint_module_vars) {
+half2 bitcast_1df11f() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_1df11f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_1df11f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_1df11f();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_1df11f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_1df11f();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_1df11f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl
index 6c085b0..2ea2d75 100644
--- a/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/214f23.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_214f23(tint_module_vars_struct tint_module_vars) {
+int2 bitcast_214f23() {
   int2 res = int2(1006648320);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_214f23(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_214f23(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_214f23();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_214f23(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_214f23();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_214f23();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl
index 474bfc6..61c8599 100644
--- a/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/23c8bd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_23c8bd(tint_module_vars_struct tint_module_vars) {
+float bitcast_23c8bd() {
   float res = 0.00782680511474609375f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_23c8bd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_23c8bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_23c8bd();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_23c8bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_23c8bd();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_23c8bd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl
index 22cff32..b8584ac 100644
--- a/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/2421c8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_2421c8(tint_module_vars_struct tint_module_vars) {
+float2 bitcast_2421c8() {
   float2 res = float2(1.40129846e-45f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_2421c8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2421c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2421c8();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2421c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2421c8();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_2421c8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl
index 6658a3c..83ae75f 100644
--- a/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/287bdf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_287bdf(tint_module_vars_struct tint_module_vars) {
+uint3 bitcast_287bdf() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_287bdf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_287bdf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_287bdf();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_287bdf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_287bdf();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_287bdf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl
index 652d229..ba5c782 100644
--- a/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/2a6e58.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_2a6e58(tint_module_vars_struct tint_module_vars) {
+float2 bitcast_2a6e58() {
   float2 res = float2(0.00782680511474609375f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_2a6e58(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2a6e58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2a6e58();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2a6e58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2a6e58();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_2a6e58();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl
index 43bd35f..db38adc 100644
--- a/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/2b05b3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_2b05b3(tint_module_vars_struct tint_module_vars) {
+float3 bitcast_2b05b3() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_2b05b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2b05b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2b05b3();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2b05b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2b05b3();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_2b05b3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl
index 8b1497a..5cd8a88 100644
--- a/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/2b2738.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_2b2738(tint_module_vars_struct tint_module_vars) {
+uint2 bitcast_2b2738() {
   uint2 res = uint2(1065353216u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_2b2738(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2b2738(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2b2738();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_2b2738(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_2b2738();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_2b2738();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl
index 24589f6..3f5ec40 100644
--- a/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/31c080.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_31c080(tint_module_vars_struct tint_module_vars) {
+uint bitcast_31c080() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_31c080(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_31c080(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_31c080();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_31c080(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_31c080();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_31c080();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl
index 568018f..76e1e64 100644
--- a/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/332f78.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_332f78(tint_module_vars_struct tint_module_vars) {
+float3 bitcast_332f78() {
   float3 res = float3(1.40129846e-45f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_332f78(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_332f78(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_332f78();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_332f78(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_332f78();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_332f78();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl
index 51aea32..954fed4 100644
--- a/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/3e7b47.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_3e7b47(tint_module_vars_struct tint_module_vars) {
+half4 bitcast_3e7b47() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_3e7b47(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_3e7b47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_3e7b47();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_3e7b47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_3e7b47();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_3e7b47();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl
index 38913bc..9dd5c14 100644
--- a/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/3f7437.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_3f7437(tint_module_vars_struct tint_module_vars) {
+int4 bitcast_3f7437() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_3f7437(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_3f7437(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_3f7437();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_3f7437(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_3f7437();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_3f7437();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl
index 7455f4a..4ec0a75 100644
--- a/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/3fdacd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_3fdacd(tint_module_vars_struct tint_module_vars) {
+float4 bitcast_3fdacd() {
   float4 res = float4(1.40129846e-45f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_3fdacd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_3fdacd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_3fdacd();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_3fdacd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_3fdacd();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_3fdacd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl
index 684eb0f..c323415 100644
--- a/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/429d64.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_429d64(tint_module_vars_struct tint_module_vars) {
+half4 bitcast_429d64() {
   half4 res = half4(0.0h, 1.875h, 0.0h, 1.875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_429d64(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_429d64(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_429d64();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_429d64(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_429d64();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_429d64();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl
index 39348d7..6ff0aa9 100644
--- a/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/436211.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_436211(tint_module_vars_struct tint_module_vars) {
+half bitcast_436211() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_436211(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_436211(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_436211();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_436211(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_436211();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_436211();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl
index ab35e40..aca592c 100644
--- a/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/5081ed.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_5081ed(tint_module_vars_struct tint_module_vars) {
+half3 bitcast_5081ed() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_5081ed(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_5081ed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_5081ed();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_5081ed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_5081ed();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_5081ed();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl
index c88828f..82284f8 100644
--- a/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/56266e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_56266e(tint_module_vars_struct tint_module_vars) {
+uint3 bitcast_56266e() {
   uint3 res = uint3(1065353216u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_56266e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_56266e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_56266e();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_56266e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_56266e();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_56266e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl
index 2370ec4..1838656 100644
--- a/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/66e93d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_66e93d(tint_module_vars_struct tint_module_vars) {
+half2 bitcast_66e93d() {
   half2 res = half2(0.00000005960464477539h, 0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_66e93d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_66e93d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_66e93d();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_66e93d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_66e93d();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_66e93d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl
index 4ffd90f..0208a6a 100644
--- a/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/674557.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_674557(tint_module_vars_struct tint_module_vars) {
+half2 bitcast_674557() {
   half2 res = half2(0.00000005960464477539h, 0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_674557(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_674557(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_674557();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_674557(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_674557();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_674557();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl
index 0f41aec..83252f3 100644
--- a/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/6ac6f9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_6ac6f9(tint_module_vars_struct tint_module_vars) {
+int bitcast_6ac6f9() {
   int res = 1006648320;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_6ac6f9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_6ac6f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_6ac6f9();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_6ac6f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_6ac6f9();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_6ac6f9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl
index aeb27f7..23c0304 100644
--- a/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/6de2bd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_6de2bd(tint_module_vars_struct tint_module_vars) {
+int4 bitcast_6de2bd() {
   int4 res = int4(1065353216);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_6de2bd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_6de2bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_6de2bd();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_6de2bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_6de2bd();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_6de2bd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl
index 2238a27..689b041 100644
--- a/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/70b121.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_70b121(tint_module_vars_struct tint_module_vars) {
+uint2 bitcast_70b121() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_70b121(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_70b121(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_70b121();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_70b121(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_70b121();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_70b121();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl
index 292e1ac..853f0f7 100644
--- a/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/71c92a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_71c92a(tint_module_vars_struct tint_module_vars) {
+half4 bitcast_71c92a() {
   half4 res = half4(0.00000005960464477539h, 0.0h, 0.00000005960464477539h, 0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_71c92a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_71c92a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_71c92a();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_71c92a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_71c92a();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_71c92a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl
index f104664..331fabf 100644
--- a/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/745b27.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_745b27(tint_module_vars_struct tint_module_vars) {
+float4 bitcast_745b27() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_745b27(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_745b27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_745b27();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_745b27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_745b27();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_745b27();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl
index 3e25471..810fb59 100644
--- a/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/7e67cc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_7e67cc(tint_module_vars_struct tint_module_vars) {
+int bitcast_7e67cc() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_7e67cc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_7e67cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_7e67cc();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_7e67cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_7e67cc();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_7e67cc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl
index 104af05..34e03ca 100644
--- a/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/7ffa9c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_7ffa9c(tint_module_vars_struct tint_module_vars) {
+uint4 bitcast_7ffa9c() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_7ffa9c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_7ffa9c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_7ffa9c();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_7ffa9c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_7ffa9c();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_7ffa9c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl
index e83a4d4..065b286 100644
--- a/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/81c5f5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_81c5f5(tint_module_vars_struct tint_module_vars) {
+uint2 bitcast_81c5f5() {
   uint2 res = uint2(1006648320u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_81c5f5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_81c5f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_81c5f5();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_81c5f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_81c5f5();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_81c5f5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl
index f6f281a..56a7c80 100644
--- a/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/8318a8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_8318a8(tint_module_vars_struct tint_module_vars) {
+uint3 bitcast_8318a8() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_8318a8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_8318a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_8318a8();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_8318a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_8318a8();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_8318a8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl
index 4e4c885..414f1e0 100644
--- a/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/879dc9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_879dc9(tint_module_vars_struct tint_module_vars) {
+uint bitcast_879dc9() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_879dc9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_879dc9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_879dc9();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_879dc9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_879dc9();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_879dc9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl
index d1f69ae..478133f 100644
--- a/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/899e50.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_899e50(tint_module_vars_struct tint_module_vars) {
+int2 bitcast_899e50() {
   int2 res = int2(1065353216);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_899e50(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_899e50(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_899e50();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_899e50(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_899e50();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_899e50();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl
index 7c03b33..21d2010 100644
--- a/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/8d184c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_8d184c(tint_module_vars_struct tint_module_vars) {
+uint4 bitcast_8d184c() {
   uint4 res = uint4(1065353216u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_8d184c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_8d184c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_8d184c();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_8d184c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_8d184c();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_8d184c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl
index 3c51299..d185a0e 100644
--- a/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/9bcf71.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_9bcf71(tint_module_vars_struct tint_module_vars) {
+float2 bitcast_9bcf71() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_9bcf71(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_9bcf71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_9bcf71();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_9bcf71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_9bcf71();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_9bcf71();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl
index 2c8744f..1d665310 100644
--- a/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/9ca42c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_9ca42c(tint_module_vars_struct tint_module_vars) {
+half2 bitcast_9ca42c() {
   half2 res = half2(0.0h, 1.875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_9ca42c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_9ca42c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_9ca42c();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_9ca42c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_9ca42c();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_9ca42c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl
index 2a77be3..da7f807 100644
--- a/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/9eee21.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_9eee21(tint_module_vars_struct tint_module_vars) {
+int3 bitcast_9eee21() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_9eee21(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_9eee21(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_9eee21();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_9eee21(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_9eee21();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_9eee21();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl
index d8cbf0c..4e46f45 100644
--- a/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/a4b290.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_a4b290(tint_module_vars_struct tint_module_vars) {
+float4 bitcast_a4b290() {
   float4 res = float4(1.40129846e-45f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_a4b290(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a4b290(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a4b290();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a4b290(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a4b290();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_a4b290();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl
index 6cf1387..cf77fa2 100644
--- a/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/a58b50.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_a58b50(tint_module_vars_struct tint_module_vars) {
+uint bitcast_a58b50() {
   uint res = 1006648320u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_a58b50(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a58b50(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a58b50();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a58b50(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a58b50();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_a58b50();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl
index a6b1b78..87bd107 100644
--- a/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/a5c539.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_a5c539(tint_module_vars_struct tint_module_vars) {
+int4 bitcast_a5c539() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_a5c539(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a5c539(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a5c539();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a5c539(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a5c539();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_a5c539();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl
index cfb0c60..91c4bf9 100644
--- a/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/a8c93f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_a8c93f(tint_module_vars_struct tint_module_vars) {
+uint4 bitcast_a8c93f() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_a8c93f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a8c93f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a8c93f();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a8c93f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a8c93f();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_a8c93f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl
index 719ce52..a0edab9 100644
--- a/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/a8ea1b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_a8ea1b(tint_module_vars_struct tint_module_vars) {
+int3 bitcast_a8ea1b() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_a8ea1b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a8ea1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a8ea1b();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_a8ea1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_a8ea1b();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_a8ea1b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl
index 3e95641..5a671bc 100644
--- a/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/ac09d0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_ac09d0(tint_module_vars_struct tint_module_vars) {
+float bitcast_ac09d0() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_ac09d0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_ac09d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_ac09d0();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_ac09d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_ac09d0();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_ac09d0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl
index 5cdad93..646c596 100644
--- a/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/ad4b05.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_ad4b05(tint_module_vars_struct tint_module_vars) {
+float bitcast_ad4b05() {
   float res = 1.40129846e-45f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_ad4b05(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_ad4b05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_ad4b05();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_ad4b05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_ad4b05();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_ad4b05();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl
index be3c430..8675211 100644
--- a/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/b28cbd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_b28cbd(tint_module_vars_struct tint_module_vars) {
+int3 bitcast_b28cbd() {
   int3 res = int3(1065353216);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_b28cbd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_b28cbd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_b28cbd();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_b28cbd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_b28cbd();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_b28cbd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl
index 9dcf0b0..ddf84b1 100644
--- a/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/b77573.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_b77573(tint_module_vars_struct tint_module_vars) {
+float2 bitcast_b77573() {
   float2 res = float2(1.40129846e-45f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_b77573(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_b77573(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_b77573();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_b77573(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_b77573();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_b77573();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl
index f263a63..21530b2 100644
--- a/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/bc3994.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_bc3994(tint_module_vars_struct tint_module_vars) {
+half4 bitcast_bc3994() {
   half4 res = half4(0.00000005960464477539h, 0.0h, 0.00000005960464477539h, 0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_bc3994(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_bc3994(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_bc3994();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_bc3994(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_bc3994();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_bc3994();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl
index ea15d36..0557163 100644
--- a/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/c69aaf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_c69aaf(tint_module_vars_struct tint_module_vars) {
+int2 bitcast_c69aaf() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_c69aaf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_c69aaf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_c69aaf();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_c69aaf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_c69aaf();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_c69aaf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl
index a78f2b8..65c5ed4 100644
--- a/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/ca5c3f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_ca5c3f(tint_module_vars_struct tint_module_vars) {
+float bitcast_ca5c3f() {
   float res = 1.40129846e-45f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_ca5c3f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_ca5c3f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_ca5c3f();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_ca5c3f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_ca5c3f();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_ca5c3f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl
index 634beb3..364fcbb 100644
--- a/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/cc7aa7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_cc7aa7(tint_module_vars_struct tint_module_vars) {
+int2 bitcast_cc7aa7() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_cc7aa7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_cc7aa7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_cc7aa7();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_cc7aa7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_cc7aa7();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_cc7aa7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl
index 2a5d16d..67feda4 100644
--- a/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/d29765.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_d29765(tint_module_vars_struct tint_module_vars) {
+uint2 bitcast_d29765() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_d29765(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_d29765(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_d29765();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_d29765(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_d29765();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_d29765();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl
index c39449d..0f7cf8d 100644
--- a/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/dce842.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_dce842(tint_module_vars_struct tint_module_vars) {
+uint bitcast_dce842() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_dce842(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_dce842(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_dce842();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_dce842(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_dce842();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_dce842();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl
index 4248ff5..944c744 100644
--- a/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/e61c57.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_e61c57(tint_module_vars_struct tint_module_vars) {
+int bitcast_e61c57() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_e61c57(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_e61c57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_e61c57();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_e61c57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_e61c57();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_e61c57();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl
index 11a2da7..e9ed519 100644
--- a/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/e6c18f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_e6c18f(tint_module_vars_struct tint_module_vars) {
+uint bitcast_e6c18f() {
   uint res = 1065353216u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_e6c18f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_e6c18f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_e6c18f();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_e6c18f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_e6c18f();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_e6c18f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl
index 5960258..c4e98dc 100644
--- a/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/bitcast/f756cd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void bitcast_f756cd(tint_module_vars_struct tint_module_vars) {
+uint3 bitcast_f756cd() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  bitcast_f756cd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_f756cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_f756cd();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  bitcast_f756cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = bitcast_f756cd();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = bitcast_f756cd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl
index 2045975..fdc0af0 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_09bf52(tint_module_vars_struct tint_module_vars) {
+half3 ceil_09bf52() {
   half3 res = half3(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_09bf52(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_09bf52(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_09bf52();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_09bf52(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_09bf52();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_09bf52();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/11b1dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/11b1dc.wgsl.expected.ir.msl
index 66736d0..4d4dc4f 100644
--- a/test/tint/builtins/gen/literal/ceil/11b1dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/11b1dc.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ceil_11b1dc() {
   float4 res = float4(2.0f);
 }
-float4 vertex_main_inner() {
-  ceil_11b1dc();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ceil_11b1dc();
 }
 kernel void compute_main() {
   ceil_11b1dc();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ceil_11b1dc();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl
index 4ed7546..9c3a2ed 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_18c240(tint_module_vars_struct tint_module_vars) {
+half2 ceil_18c240() {
   half2 res = half2(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_18c240(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_18c240(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_18c240();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_18c240(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_18c240();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_18c240();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/32c946.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/32c946.wgsl.expected.ir.msl
index 6535a4e..0fdbfbb 100644
--- a/test/tint/builtins/gen/literal/ceil/32c946.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/32c946.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ceil_32c946() {
   float3 res = float3(2.0f);
 }
-float4 vertex_main_inner() {
-  ceil_32c946();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ceil_32c946();
 }
 kernel void compute_main() {
   ceil_32c946();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ceil_32c946();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl
index 5ccdd04..daf77ac 100644
--- a/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/34064b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_34064b(tint_module_vars_struct tint_module_vars) {
+float3 ceil_34064b() {
   float3 res = float3(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_34064b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_34064b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_34064b();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_34064b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_34064b();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_34064b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl
index 95fb429..1252eb9 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_4bca2a(tint_module_vars_struct tint_module_vars) {
+half4 ceil_4bca2a() {
   half4 res = half4(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_4bca2a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_4bca2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_4bca2a();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_4bca2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_4bca2a();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_4bca2a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl
index cefde75..2c0376d 100644
--- a/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/678655.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_678655(tint_module_vars_struct tint_module_vars) {
+float ceil_678655() {
   float res = 2.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_678655(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_678655(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_678655();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_678655(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_678655();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_678655();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl
index 4718fe9..22c9cde 100644
--- a/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/96f597.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_96f597(tint_module_vars_struct tint_module_vars) {
+float2 ceil_96f597() {
   float2 res = float2(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_96f597(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_96f597(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_96f597();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_96f597(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_96f597();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_96f597();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl
index a7b7c07..5b25960 100644
--- a/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/b74c16.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_b74c16(tint_module_vars_struct tint_module_vars) {
+float4 ceil_b74c16() {
   float4 res = float4(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_b74c16(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_b74c16(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_b74c16();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_b74c16(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_b74c16();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_b74c16();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/bb2ca2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/bb2ca2.wgsl.expected.ir.msl
index 8a98b52..3568a86 100644
--- a/test/tint/builtins/gen/literal/ceil/bb2ca2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/bb2ca2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ceil_bb2ca2() {
   float2 res = float2(2.0f);
 }
-float4 vertex_main_inner() {
-  ceil_bb2ca2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ceil_bb2ca2();
 }
 kernel void compute_main() {
   ceil_bb2ca2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ceil_bb2ca2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/e0b70a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/e0b70a.wgsl.expected.ir.msl
index 4609bd0..f755953 100644
--- a/test/tint/builtins/gen/literal/ceil/e0b70a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/e0b70a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ceil_e0b70a() {
   float res = 2.0f;
 }
-float4 vertex_main_inner() {
-  ceil_e0b70a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ceil_e0b70a();
 }
 kernel void compute_main() {
   ceil_e0b70a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ceil_e0b70a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl
index a6df7b9..9d6fc5e 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ceil_f3f889(tint_module_vars_struct tint_module_vars) {
+half ceil_f3f889() {
   half res = 2.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ceil_f3f889(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_f3f889(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_f3f889();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ceil_f3f889(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ceil_f3f889();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ceil_f3f889();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl
index cea8b4e..b6dc07b 100644
--- a/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/0acf8f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_0acf8f(tint_module_vars_struct tint_module_vars) {
+float2 clamp_0acf8f() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_0acf8f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_0acf8f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_0acf8f();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_0acf8f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_0acf8f();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_0acf8f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.ir.msl
index 2bd6663..a90ebbf 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_177548() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  clamp_177548();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_177548();
 }
 kernel void compute_main() {
   clamp_177548();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_177548();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl
index e21cd92..e0431f9 100644
--- a/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/1a32e3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_1a32e3(tint_module_vars_struct tint_module_vars) {
+int4 clamp_1a32e3() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_1a32e3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_1a32e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_1a32e3();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_1a32e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_1a32e3();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_1a32e3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl
index c70dc5c..33e87a6 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_235b29(tint_module_vars_struct tint_module_vars) {
+half2 clamp_235b29() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_235b29(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_235b29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_235b29();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_235b29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_235b29();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_235b29();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.ir.msl
index 826c1b2..89c7207 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_23aa4f() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  clamp_23aa4f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_23aa4f();
 }
 kernel void compute_main() {
   clamp_23aa4f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_23aa4f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl
index dbc0ae4..07cc63d 100644
--- a/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/2bd567.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_2bd567(tint_module_vars_struct tint_module_vars) {
+float clamp_2bd567() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_2bd567(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_2bd567(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_2bd567();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_2bd567(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_2bd567();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_2bd567();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl
index 9c3eff6..7a3374b 100644
--- a/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/2bde41.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_2bde41(tint_module_vars_struct tint_module_vars) {
+float4 clamp_2bde41() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_2bde41(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_2bde41(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_2bde41();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_2bde41(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_2bde41();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_2bde41();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl
index 50311dd..ec72d07 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_2c251b(tint_module_vars_struct tint_module_vars) {
+half4 clamp_2c251b() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_2c251b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_2c251b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_2c251b();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_2c251b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_2c251b();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_2c251b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl
index 0a0bb09..8ae0014 100644
--- a/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/548fc7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_548fc7(tint_module_vars_struct tint_module_vars) {
+uint3 clamp_548fc7() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_548fc7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_548fc7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_548fc7();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_548fc7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_548fc7();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_548fc7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl
index d59b17d..8419797 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_553ffb(tint_module_vars_struct tint_module_vars) {
+half clamp_553ffb() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_553ffb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_553ffb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_553ffb();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_553ffb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_553ffb();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_553ffb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.ir.msl
index 771222a..0efca02 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_5cf700() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  clamp_5cf700();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_5cf700();
 }
 kernel void compute_main() {
   clamp_5cf700();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_5cf700();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl
index b8d142d..c9e89b6 100644
--- a/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/5f0819.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_5f0819(tint_module_vars_struct tint_module_vars) {
+int3 clamp_5f0819() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_5f0819(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_5f0819(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_5f0819();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_5f0819(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_5f0819();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_5f0819();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl
index d84db50..1903c5d 100644
--- a/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/6c1749.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_6c1749(tint_module_vars_struct tint_module_vars) {
+int2 clamp_6c1749() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_6c1749(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_6c1749(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_6c1749();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_6c1749(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_6c1749();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_6c1749();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl
index fc17186..59d77c3 100644
--- a/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/7706d7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_7706d7(tint_module_vars_struct tint_module_vars) {
+uint2 clamp_7706d7() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_7706d7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_7706d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_7706d7();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_7706d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_7706d7();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_7706d7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl
index dbb32bc..4173114 100644
--- a/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/867397.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_867397(tint_module_vars_struct tint_module_vars) {
+float3 clamp_867397() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_867397(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_867397(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_867397();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_867397(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_867397();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_867397();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.ir.msl
index 6d438eb..1ca09e8 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_87df46() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  clamp_87df46();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_87df46();
 }
 kernel void compute_main() {
   clamp_87df46();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_87df46();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.ir.msl
index 742191b..852f554 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_8b1eaa() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  clamp_8b1eaa();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_8b1eaa();
 }
 kernel void compute_main() {
   clamp_8b1eaa();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_8b1eaa();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.ir.msl
index 63df666..d9efbec 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_96e56a() {
   int res = 1;
 }
-float4 vertex_main_inner() {
-  clamp_96e56a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_96e56a();
 }
 kernel void compute_main() {
   clamp_96e56a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_96e56a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.ir.msl
index a54af67..0f894ef 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_9d731c() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  clamp_9d731c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_9d731c();
 }
 kernel void compute_main() {
   clamp_9d731c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_9d731c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl
index 483af36..1ac52fd 100644
--- a/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/a2de25.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_a2de25(tint_module_vars_struct tint_module_vars) {
+uint clamp_a2de25() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_a2de25(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_a2de25(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_a2de25();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_a2de25(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_a2de25();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_a2de25();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl
index 9a91a8e..1c25846 100644
--- a/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/b07c65.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_b07c65(tint_module_vars_struct tint_module_vars) {
+int clamp_b07c65() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_b07c65(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_b07c65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_b07c65();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_b07c65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_b07c65();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_b07c65();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl
index 67a2d0c..baa583d 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_b195eb(tint_module_vars_struct tint_module_vars) {
+half3 clamp_b195eb() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_b195eb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_b195eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_b195eb();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_b195eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_b195eb();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_b195eb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl
index 71e0b28..750de24 100644
--- a/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/bd43ce.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void clamp_bd43ce(tint_module_vars_struct tint_module_vars) {
+uint4 clamp_bd43ce() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  clamp_bd43ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_bd43ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_bd43ce();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  clamp_bd43ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = clamp_bd43ce();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = clamp_bd43ce();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.ir.msl
index 3b46b1e..e681273 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void clamp_d396af() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  clamp_d396af();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   clamp_d396af();
 }
 kernel void compute_main() {
   clamp_d396af();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  clamp_d396af();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl
index 26a41b6..83b0c78 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_0835a8(tint_module_vars_struct tint_module_vars) {
+half3 cos_0835a8() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_0835a8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_0835a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_0835a8();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_0835a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_0835a8();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_0835a8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl
index 2107cb1..751dc3c 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_0a89f7(tint_module_vars_struct tint_module_vars) {
+half4 cos_0a89f7() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_0a89f7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_0a89f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_0a89f7();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_0a89f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_0a89f7();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_0a89f7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl
index 5424387..eefb4a3 100644
--- a/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/16dc15.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_16dc15(tint_module_vars_struct tint_module_vars) {
+float3 cos_16dc15() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_16dc15(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_16dc15(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_16dc15();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_16dc15(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_16dc15();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_16dc15();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl
index a47d22b..cf4d117 100644
--- a/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/29d66d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_29d66d(tint_module_vars_struct tint_module_vars) {
+float4 cos_29d66d() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_29d66d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_29d66d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_29d66d();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_29d66d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_29d66d();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_29d66d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/47d768.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/47d768.wgsl.expected.ir.msl
index 6a003b8..a842c33 100644
--- a/test/tint/builtins/gen/literal/cos/47d768.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/47d768.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cos_47d768() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  cos_47d768();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cos_47d768();
 }
 kernel void compute_main() {
   cos_47d768();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cos_47d768();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl
index c26dc40..75797d1 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_5bc2c6(tint_module_vars_struct tint_module_vars) {
+half2 cos_5bc2c6() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_5bc2c6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_5bc2c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_5bc2c6();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_5bc2c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_5bc2c6();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_5bc2c6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/6b1fdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/6b1fdf.wgsl.expected.ir.msl
index 66a0d5a..0037398 100644
--- a/test/tint/builtins/gen/literal/cos/6b1fdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/6b1fdf.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cos_6b1fdf() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  cos_6b1fdf();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cos_6b1fdf();
 }
 kernel void compute_main() {
   cos_6b1fdf();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cos_6b1fdf();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cos/a297d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/a297d4.wgsl.expected.ir.msl
index 50b4601..f7d8b4d 100644
--- a/test/tint/builtins/gen/literal/cos/a297d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/a297d4.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cos_a297d4() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  cos_a297d4();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cos_a297d4();
 }
 kernel void compute_main() {
   cos_a297d4();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cos_a297d4();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cos/af7447.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/af7447.wgsl.expected.ir.msl
index 2a3c317..386d0a3 100644
--- a/test/tint/builtins/gen/literal/cos/af7447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/af7447.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cos_af7447() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  cos_af7447();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cos_af7447();
 }
 kernel void compute_main() {
   cos_af7447();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cos_af7447();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl
index dd38a59..175f000 100644
--- a/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/c3b486.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_c3b486(tint_module_vars_struct tint_module_vars) {
+float2 cos_c3b486() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_c3b486(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_c3b486(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_c3b486();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_c3b486(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_c3b486();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_c3b486();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl
index be5d5be..a669cb5 100644
--- a/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/c5c28e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_c5c28e(tint_module_vars_struct tint_module_vars) {
+float cos_c5c28e() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_c5c28e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_c5c28e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_c5c28e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_c5c28e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_c5c28e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_c5c28e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl
index 7260e74..8e4f448 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cos_fc047d(tint_module_vars_struct tint_module_vars) {
+half cos_fc047d() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cos_fc047d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_fc047d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_fc047d();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cos_fc047d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cos_fc047d();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cos_fc047d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl
index 53da066..bfacdf5 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_2ed778(tint_module_vars_struct tint_module_vars) {
+half cosh_2ed778() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_2ed778(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_2ed778(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_2ed778();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_2ed778(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_2ed778();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_2ed778();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl
index a2b848e..aaa3dbe 100644
--- a/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/377652.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_377652(tint_module_vars_struct tint_module_vars) {
+float3 cosh_377652() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_377652(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_377652(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_377652();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_377652(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_377652();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_377652();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl
index 81c12c1..d5fa1c1 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_3b7bbf(tint_module_vars_struct tint_module_vars) {
+half4 cosh_3b7bbf() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_3b7bbf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_3b7bbf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_3b7bbf();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_3b7bbf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_3b7bbf();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_3b7bbf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/432645.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/432645.wgsl.expected.ir.msl
index ba1238f..8c30a9d 100644
--- a/test/tint/builtins/gen/literal/cosh/432645.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/432645.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cosh_432645() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  cosh_432645();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cosh_432645();
 }
 kernel void compute_main() {
   cosh_432645();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cosh_432645();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl
index c80d82b..87befcb 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_43b672(tint_module_vars_struct tint_module_vars) {
+half2 cosh_43b672() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_43b672(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_43b672(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_43b672();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_43b672(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_43b672();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_43b672();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl
index 13f61c6..01cc234 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_b1b8a0(tint_module_vars_struct tint_module_vars) {
+half3 cosh_b1b8a0() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_b1b8a0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_b1b8a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_b1b8a0();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_b1b8a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_b1b8a0();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_b1b8a0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl
index c817215..2b63898 100644
--- a/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/c13756.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_c13756(tint_module_vars_struct tint_module_vars) {
+float2 cosh_c13756() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_c13756(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_c13756(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_c13756();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_c13756(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_c13756();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_c13756();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/c892bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/c892bb.wgsl.expected.ir.msl
index 62ddd64..4ab1019 100644
--- a/test/tint/builtins/gen/literal/cosh/c892bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/c892bb.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cosh_c892bb() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  cosh_c892bb();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cosh_c892bb();
 }
 kernel void compute_main() {
   cosh_c892bb();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cosh_c892bb();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/d8dee7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/d8dee7.wgsl.expected.ir.msl
index 39df612..37ff76d 100644
--- a/test/tint/builtins/gen/literal/cosh/d8dee7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/d8dee7.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cosh_d8dee7() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  cosh_d8dee7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cosh_d8dee7();
 }
 kernel void compute_main() {
   cosh_d8dee7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cosh_d8dee7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl
index 8e56bed..94932fd 100644
--- a/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/da92dd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_da92dd(tint_module_vars_struct tint_module_vars) {
+float cosh_da92dd() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_da92dd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_da92dd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_da92dd();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_da92dd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_da92dd();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_da92dd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl
index df10e3e..91bddb2 100644
--- a/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/e0c1de.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cosh_e0c1de(tint_module_vars_struct tint_module_vars) {
+float4 cosh_e0c1de() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cosh_e0c1de(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_e0c1de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_e0c1de();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cosh_e0c1de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cosh_e0c1de();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cosh_e0c1de();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cosh/f67ff1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cosh/f67ff1.wgsl.expected.ir.msl
index 31f7d1b..4c3c5ba 100644
--- a/test/tint/builtins/gen/literal/cosh/f67ff1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cosh/f67ff1.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cosh_f67ff1() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  cosh_f67ff1();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cosh_f67ff1();
 }
 kernel void compute_main() {
   cosh_f67ff1();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cosh_f67ff1();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl
index 05f9b02..a5ced3f 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/208d46.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_208d46(tint_module_vars_struct tint_module_vars) {
+uint countLeadingZeros_208d46() {
   uint res = 31u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_208d46(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_208d46(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_208d46();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_208d46(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_208d46();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_208d46();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl
index c42ab4a..4e190f2 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/6d4656.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_6d4656(tint_module_vars_struct tint_module_vars) {
+int countLeadingZeros_6d4656() {
   int res = 31;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_6d4656(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_6d4656(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_6d4656();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_6d4656(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_6d4656();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_6d4656();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl
index 922a96a..5e8dafb 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/70783f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_70783f(tint_module_vars_struct tint_module_vars) {
+uint2 countLeadingZeros_70783f() {
   uint2 res = uint2(31u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_70783f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_70783f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_70783f();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_70783f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_70783f();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_70783f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
index a958201..f0c690d 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/7c38a6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_7c38a6(tint_module_vars_struct tint_module_vars) {
+int3 countLeadingZeros_7c38a6() {
   int3 res = int3(31);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_7c38a6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_7c38a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_7c38a6();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_7c38a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_7c38a6();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_7c38a6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl
index 2814ef4..fbda0b8 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/858d40.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_858d40(tint_module_vars_struct tint_module_vars) {
+int2 countLeadingZeros_858d40() {
   int2 res = int2(31);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_858d40(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_858d40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_858d40();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_858d40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_858d40();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_858d40();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl
index 282674a..e844273 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/ab6345.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_ab6345(tint_module_vars_struct tint_module_vars) {
+uint3 countLeadingZeros_ab6345() {
   uint3 res = uint3(31u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_ab6345(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_ab6345(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_ab6345();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_ab6345(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_ab6345();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_ab6345();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl
index eaf5ec7..76b57c6 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/eab32b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_eab32b(tint_module_vars_struct tint_module_vars) {
+int4 countLeadingZeros_eab32b() {
   int4 res = int4(31);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_eab32b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_eab32b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_eab32b();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_eab32b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_eab32b();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_eab32b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl
index b35fea7..2b8edce 100644
--- a/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countLeadingZeros/f70103.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countLeadingZeros_f70103(tint_module_vars_struct tint_module_vars) {
+uint4 countLeadingZeros_f70103() {
   uint4 res = uint4(31u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countLeadingZeros_f70103(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_f70103(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_f70103();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countLeadingZeros_f70103(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countLeadingZeros_f70103();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countLeadingZeros_f70103();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl
index 4540ccb..372df0d 100644
--- a/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/0d0e46.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_0d0e46(tint_module_vars_struct tint_module_vars) {
+uint4 countOneBits_0d0e46() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_0d0e46(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_0d0e46(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_0d0e46();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_0d0e46(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_0d0e46();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_0d0e46();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl
index 50d2c0b..eb1dd7f 100644
--- a/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/0f7980.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_0f7980(tint_module_vars_struct tint_module_vars) {
+int4 countOneBits_0f7980() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_0f7980(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_0f7980(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_0f7980();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_0f7980(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_0f7980();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_0f7980();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl
index a1de28f..eed09c8 100644
--- a/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/65d2ae.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_65d2ae(tint_module_vars_struct tint_module_vars) {
+int3 countOneBits_65d2ae() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_65d2ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_65d2ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_65d2ae();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_65d2ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_65d2ae();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_65d2ae();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl
index 8ecd496..2837084 100644
--- a/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/690cfc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_690cfc(tint_module_vars_struct tint_module_vars) {
+uint3 countOneBits_690cfc() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_690cfc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_690cfc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_690cfc();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_690cfc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_690cfc();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_690cfc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl
index 28209e0..cc1cbda 100644
--- a/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/94fd81.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_94fd81(tint_module_vars_struct tint_module_vars) {
+uint2 countOneBits_94fd81() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_94fd81(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_94fd81(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_94fd81();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_94fd81(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_94fd81();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_94fd81();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl
index 0425f73..ecff9fc 100644
--- a/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/ae44f9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_ae44f9(tint_module_vars_struct tint_module_vars) {
+uint countOneBits_ae44f9() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_ae44f9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_ae44f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_ae44f9();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_ae44f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_ae44f9();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_ae44f9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl
index 48dd55b..43b3bea 100644
--- a/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/af90e2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_af90e2(tint_module_vars_struct tint_module_vars) {
+int2 countOneBits_af90e2() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_af90e2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_af90e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_af90e2();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_af90e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_af90e2();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_af90e2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl
index 4932ebf..096ddd1 100644
--- a/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countOneBits/fd88b2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countOneBits_fd88b2(tint_module_vars_struct tint_module_vars) {
+int countOneBits_fd88b2() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countOneBits_fd88b2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_fd88b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_fd88b2();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countOneBits_fd88b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countOneBits_fd88b2();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countOneBits_fd88b2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl
index 37739c8..d53a695 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/1ad138.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_1ad138(tint_module_vars_struct tint_module_vars) {
+uint2 countTrailingZeros_1ad138() {
   uint2 res = uint2(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_1ad138(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_1ad138(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_1ad138();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_1ad138(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_1ad138();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_1ad138();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
index dd7e884..1fc2fc2 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/1dc84a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_1dc84a(tint_module_vars_struct tint_module_vars) {
+int4 countTrailingZeros_1dc84a() {
   int4 res = int4(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_1dc84a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_1dc84a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_1dc84a();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_1dc84a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_1dc84a();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_1dc84a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl
index a1a0e97..2a8bafc 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/21e394.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_21e394(tint_module_vars_struct tint_module_vars) {
+uint countTrailingZeros_21e394() {
   uint res = 0u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_21e394(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_21e394(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_21e394();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_21e394(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_21e394();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_21e394();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl
index 046bcd0..efa4773 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/327c37.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_327c37(tint_module_vars_struct tint_module_vars) {
+int2 countTrailingZeros_327c37() {
   int2 res = int2(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_327c37(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_327c37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_327c37();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_327c37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_327c37();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_327c37();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl
index f42bf43..1b01227 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/42fed6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_42fed6(tint_module_vars_struct tint_module_vars) {
+int countTrailingZeros_42fed6() {
   int res = 0;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_42fed6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_42fed6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_42fed6();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_42fed6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_42fed6();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_42fed6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
index a6244f4..709b2f6 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/8ed26f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_8ed26f(tint_module_vars_struct tint_module_vars) {
+uint3 countTrailingZeros_8ed26f() {
   uint3 res = uint3(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_8ed26f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_8ed26f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_8ed26f();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_8ed26f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_8ed26f();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_8ed26f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl
index 1e97542..9fff9b9 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/acfacb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_acfacb(tint_module_vars_struct tint_module_vars) {
+int3 countTrailingZeros_acfacb() {
   int3 res = int3(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_acfacb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_acfacb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_acfacb();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_acfacb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_acfacb();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_acfacb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
index ed0569b..caca8b0 100644
--- a/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/countTrailingZeros/d2b4a0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void countTrailingZeros_d2b4a0(tint_module_vars_struct tint_module_vars) {
+uint4 countTrailingZeros_d2b4a0() {
   uint4 res = uint4(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  countTrailingZeros_d2b4a0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_d2b4a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_d2b4a0();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  countTrailingZeros_d2b4a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = countTrailingZeros_d2b4a0();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = countTrailingZeros_d2b4a0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl
index ad96710..583e14a 100644
--- a/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cross/041cb0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cross_041cb0(tint_module_vars_struct tint_module_vars) {
+float3 cross_041cb0() {
   float3 res = float3(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cross_041cb0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cross_041cb0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cross_041cb0();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cross_041cb0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cross_041cb0();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cross_041cb0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/cross/1d7933.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cross/1d7933.wgsl.expected.ir.msl
index abaf84b..3fed276 100644
--- a/test/tint/builtins/gen/literal/cross/1d7933.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cross/1d7933.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void cross_1d7933() {
   float3 res = float3(0.0f);
 }
-float4 vertex_main_inner() {
-  cross_1d7933();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   cross_1d7933();
 }
 kernel void compute_main() {
   cross_1d7933();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  cross_1d7933();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl
index fe3ccd7..e54c0d0 100644
--- a/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void cross_9857cb(tint_module_vars_struct tint_module_vars) {
+half3 cross_9857cb() {
   half3 res = half3(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  cross_9857cb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cross_9857cb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cross_9857cb();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  cross_9857cb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = cross_9857cb();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = cross_9857cb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl
index 5e0e469..51340035 100644
--- a/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/0d170c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_0d170c(tint_module_vars_struct tint_module_vars) {
+float4 degrees_0d170c() {
   float4 res = float4(57.2957763671875f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_0d170c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_0d170c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_0d170c();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_0d170c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_0d170c();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_0d170c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl
index e13c449..c54fc1d 100644
--- a/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/1ad5df.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_1ad5df(tint_module_vars_struct tint_module_vars) {
+float2 degrees_1ad5df() {
   float2 res = float2(57.2957763671875f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_1ad5df(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_1ad5df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_1ad5df();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_1ad5df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_1ad5df();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_1ad5df();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl
index 69219b5..a31c5cd 100644
--- a/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/2af623.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_2af623(tint_module_vars_struct tint_module_vars) {
+float3 degrees_2af623() {
   float3 res = float3(57.2957763671875f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_2af623(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_2af623(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_2af623();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_2af623(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_2af623();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_2af623();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl
index ce9155c..d401d6d 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_3055d3(tint_module_vars_struct tint_module_vars) {
+half4 degrees_3055d3() {
   half4 res = half4(57.3125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_3055d3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_3055d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_3055d3();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_3055d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_3055d3();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_3055d3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl
index 748cd48..7d1fb76 100644
--- a/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/51f705.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_51f705(tint_module_vars_struct tint_module_vars) {
+float degrees_51f705() {
   float res = 57.2957763671875f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_51f705(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_51f705(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_51f705();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_51f705(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_51f705();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_51f705();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl
index 193e812..6f2c081 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_5e9805(tint_module_vars_struct tint_module_vars) {
+half degrees_5e9805() {
   half res = 57.3125h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_5e9805(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_5e9805(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_5e9805();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_5e9805(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_5e9805();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_5e9805();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/810467.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/810467.wgsl.expected.ir.msl
index df3a518..71559ee 100644
--- a/test/tint/builtins/gen/literal/degrees/810467.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/810467.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void degrees_810467() {
   float2 res = float2(57.295780181884765625f);
 }
-float4 vertex_main_inner() {
-  degrees_810467();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   degrees_810467();
 }
 kernel void compute_main() {
   degrees_810467();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  degrees_810467();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/c0880c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/c0880c.wgsl.expected.ir.msl
index 8f4ef08..269d092 100644
--- a/test/tint/builtins/gen/literal/degrees/c0880c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/c0880c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void degrees_c0880c() {
   float3 res = float3(57.295780181884765625f);
 }
-float4 vertex_main_inner() {
-  degrees_c0880c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   degrees_c0880c();
 }
 kernel void compute_main() {
   degrees_c0880c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  degrees_c0880c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/d43a49.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/d43a49.wgsl.expected.ir.msl
index ba70a98..a1b53bb 100644
--- a/test/tint/builtins/gen/literal/degrees/d43a49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/d43a49.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void degrees_d43a49() {
   float4 res = float4(57.295780181884765625f);
 }
-float4 vertex_main_inner() {
-  degrees_d43a49();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   degrees_d43a49();
 }
 kernel void compute_main() {
   degrees_d43a49();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  degrees_d43a49();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl
index 2bcc723..4cd8476 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_dfe8f4(tint_module_vars_struct tint_module_vars) {
+half3 degrees_dfe8f4() {
   half3 res = half3(57.3125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_dfe8f4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_dfe8f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_dfe8f4();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_dfe8f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_dfe8f4();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_dfe8f4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl
index 5c50bd0..9f757c0 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void degrees_f59715(tint_module_vars_struct tint_module_vars) {
+half2 degrees_f59715() {
   half2 res = half2(57.3125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  degrees_f59715(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_f59715(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_f59715();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  degrees_f59715(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = degrees_f59715();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = degrees_f59715();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/degrees/fafa7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/degrees/fafa7e.wgsl.expected.ir.msl
index 7325723..ec45870 100644
--- a/test/tint/builtins/gen/literal/degrees/fafa7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/degrees/fafa7e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void degrees_fafa7e() {
   float res = 57.295780181884765625f;
 }
-float4 vertex_main_inner() {
-  degrees_fafa7e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   degrees_fafa7e();
 }
 kernel void compute_main() {
   degrees_fafa7e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  degrees_fafa7e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/1bf6e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/1bf6e7.wgsl.expected.ir.msl
index be664c2..37c65ec 100644
--- a/test/tint/builtins/gen/literal/determinant/1bf6e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/1bf6e7.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void determinant_1bf6e7() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  determinant_1bf6e7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   determinant_1bf6e7();
 }
 kernel void compute_main() {
   determinant_1bf6e7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  determinant_1bf6e7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl
index fc015f0..1d1ea75 100644
--- a/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/2b62ba.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void determinant_2b62ba(tint_module_vars_struct tint_module_vars) {
+float determinant_2b62ba() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  determinant_2b62ba(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_2b62ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_2b62ba();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_2b62ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_2b62ba();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = determinant_2b62ba();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl
index f0ff4ee..073abf0 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void determinant_32bfde(tint_module_vars_struct tint_module_vars) {
+half determinant_32bfde() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  determinant_32bfde(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_32bfde(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_32bfde();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_32bfde(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_32bfde();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = determinant_32bfde();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl
index 53aba11..fe02249 100644
--- a/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/a0a87c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void determinant_a0a87c(tint_module_vars_struct tint_module_vars) {
+float determinant_a0a87c() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  determinant_a0a87c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_a0a87c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_a0a87c();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_a0a87c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_a0a87c();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = determinant_a0a87c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/c8251d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/c8251d.wgsl.expected.ir.msl
index b2a751f..8a83341 100644
--- a/test/tint/builtins/gen/literal/determinant/c8251d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/c8251d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void determinant_c8251d() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  determinant_c8251d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   determinant_c8251d();
 }
 kernel void compute_main() {
   determinant_c8251d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  determinant_c8251d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/cefdf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/cefdf3.wgsl.expected.ir.msl
index 642cbc5..eef0713 100644
--- a/test/tint/builtins/gen/literal/determinant/cefdf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/cefdf3.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void determinant_cefdf3() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  determinant_cefdf3();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   determinant_cefdf3();
 }
 kernel void compute_main() {
   determinant_cefdf3();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  determinant_cefdf3();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl
index a6e603d..7c0fe15 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void determinant_d7c86f(tint_module_vars_struct tint_module_vars) {
+half determinant_d7c86f() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  determinant_d7c86f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_d7c86f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_d7c86f();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_d7c86f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_d7c86f();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = determinant_d7c86f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl
index ea309f49a..aaf9c24 100644
--- a/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/e19305.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void determinant_e19305(tint_module_vars_struct tint_module_vars) {
+float determinant_e19305() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  determinant_e19305(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_e19305(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_e19305();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_e19305(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_e19305();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = determinant_e19305();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl
index c45f35b..9b18c76 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void determinant_fc12a5(tint_module_vars_struct tint_module_vars) {
+half determinant_fc12a5() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  determinant_fc12a5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_fc12a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_fc12a5();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  determinant_fc12a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = determinant_fc12a5();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = determinant_fc12a5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl
index ff7b882..7922fb9 100644
--- a/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/0657d4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_0657d4(tint_module_vars_struct tint_module_vars) {
+float distance_0657d4() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_0657d4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_0657d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_0657d4();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_0657d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_0657d4();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_0657d4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/3a175a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/3a175a.wgsl.expected.ir.msl
index 205cdd9..bbf811b 100644
--- a/test/tint/builtins/gen/literal/distance/3a175a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/3a175a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void distance_3a175a() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  distance_3a175a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   distance_3a175a();
 }
 kernel void compute_main() {
   distance_3a175a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  distance_3a175a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl
index 5502d98..3500b0f 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_7272f3(tint_module_vars_struct tint_module_vars) {
+half distance_7272f3() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_7272f3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_7272f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_7272f3();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_7272f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_7272f3();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_7272f3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl
index 1e8e29d..2d142a7 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_7d201f(tint_module_vars_struct tint_module_vars) {
+half distance_7d201f() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_7d201f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_7d201f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_7d201f();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_7d201f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_7d201f();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_7d201f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/83911f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/83911f.wgsl.expected.ir.msl
index 98a8a11..59b8fa6 100644
--- a/test/tint/builtins/gen/literal/distance/83911f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/83911f.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void distance_83911f() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  distance_83911f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   distance_83911f();
 }
 kernel void compute_main() {
   distance_83911f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  distance_83911f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl
index 0747564..4617210 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_892a5d(tint_module_vars_struct tint_module_vars) {
+half distance_892a5d() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_892a5d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_892a5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_892a5d();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_892a5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_892a5d();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_892a5d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl
index 2a1a8b8..4771ace 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_928fa0(tint_module_vars_struct tint_module_vars) {
+half distance_928fa0() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_928fa0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_928fa0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_928fa0();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_928fa0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_928fa0();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_928fa0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl
index a3c0a1c..9fef75b 100644
--- a/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/9646ea.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_9646ea(tint_module_vars_struct tint_module_vars) {
+float distance_9646ea() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_9646ea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_9646ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_9646ea();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_9646ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_9646ea();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_9646ea();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl
index dd4110f..0a58597 100644
--- a/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/aa4055.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_aa4055(tint_module_vars_struct tint_module_vars) {
+float distance_aa4055() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_aa4055(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_aa4055(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_aa4055();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_aa4055(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_aa4055();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_aa4055();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/ac5535.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/ac5535.wgsl.expected.ir.msl
index 855e25a..da7607f 100644
--- a/test/tint/builtins/gen/literal/distance/ac5535.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/ac5535.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void distance_ac5535() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  distance_ac5535();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   distance_ac5535();
 }
 kernel void compute_main() {
   distance_ac5535();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  distance_ac5535();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl
index 98a5df1..af200be 100644
--- a/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/cfed73.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void distance_cfed73(tint_module_vars_struct tint_module_vars) {
+float distance_cfed73() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  distance_cfed73(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_cfed73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_cfed73();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  distance_cfed73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = distance_cfed73();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = distance_cfed73();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/distance/f9c9ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/distance/f9c9ee.wgsl.expected.ir.msl
index 3fed934..2dafb7c 100644
--- a/test/tint/builtins/gen/literal/distance/f9c9ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/distance/f9c9ee.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void distance_f9c9ee() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  distance_f9c9ee();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   distance_f9c9ee();
 }
 kernel void compute_main() {
   distance_f9c9ee();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  distance_f9c9ee();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/08eb56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/08eb56.wgsl.expected.ir.msl
index f37ead4..6e08eed 100644
--- a/test/tint/builtins/gen/literal/dot/08eb56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/08eb56.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void dot_08eb56() {
   float res = 4.0f;
 }
-float4 vertex_main_inner() {
-  dot_08eb56();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   dot_08eb56();
 }
 kernel void compute_main() {
   dot_08eb56();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  dot_08eb56();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl
index af9deea..0f8600a 100644
--- a/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/0c577b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_0c577b(tint_module_vars_struct tint_module_vars) {
+float dot_0c577b() {
   float res = 4.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_0c577b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_0c577b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_0c577b();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_0c577b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_0c577b();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_0c577b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/0d2c2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/0d2c2e.wgsl.expected.ir.msl
index 9a69eb7..ef80a26 100644
--- a/test/tint/builtins/gen/literal/dot/0d2c2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/0d2c2e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void dot_0d2c2e() {
   float res = 2.0f;
 }
-float4 vertex_main_inner() {
-  dot_0d2c2e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   dot_0d2c2e();
 }
 kernel void compute_main() {
   dot_0d2c2e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  dot_0d2c2e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/14bc63.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/14bc63.wgsl.expected.ir.msl
index 3f19996..323ac1e 100644
--- a/test/tint/builtins/gen/literal/dot/14bc63.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/14bc63.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void dot_14bc63() {
   int res = 2;
 }
-float4 vertex_main_inner() {
-  dot_14bc63();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   dot_14bc63();
 }
 kernel void compute_main() {
   dot_14bc63();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  dot_14bc63();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/5a4c8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/5a4c8f.wgsl.expected.ir.msl
index 9e78052..febc162 100644
--- a/test/tint/builtins/gen/literal/dot/5a4c8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/5a4c8f.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void dot_5a4c8f() {
   float res = 3.0f;
 }
-float4 vertex_main_inner() {
-  dot_5a4c8f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   dot_5a4c8f();
 }
 kernel void compute_main() {
   dot_5a4c8f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  dot_5a4c8f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl
index 9cb6733..c8d850a 100644
--- a/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/7548a0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_7548a0(tint_module_vars_struct tint_module_vars) {
+uint dot_7548a0() {
   uint res = 3u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_7548a0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_7548a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_7548a0();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_7548a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_7548a0();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_7548a0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl
index 1d1a708..aa288df 100644
--- a/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/883f0e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_883f0e(tint_module_vars_struct tint_module_vars) {
+float dot_883f0e() {
   float res = 2.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_883f0e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_883f0e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_883f0e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_883f0e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_883f0e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_883f0e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl
index dc45f34..2f195f2 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_8e40f1(tint_module_vars_struct tint_module_vars) {
+half dot_8e40f1() {
   half res = 3.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_8e40f1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_8e40f1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_8e40f1();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_8e40f1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_8e40f1();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_8e40f1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl
index c4401a2..6f4a3c6 100644
--- a/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/97c7ee.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_97c7ee(tint_module_vars_struct tint_module_vars) {
+uint dot_97c7ee() {
   uint res = 2u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_97c7ee(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_97c7ee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_97c7ee();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_97c7ee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_97c7ee();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_97c7ee();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl
index ac2da3f..fada7e5 100644
--- a/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/ba4246.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_ba4246(tint_module_vars_struct tint_module_vars) {
+float dot_ba4246() {
   float res = 3.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_ba4246(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_ba4246(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_ba4246();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_ba4246(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_ba4246();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_ba4246();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/c11efe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/c11efe.wgsl.expected.ir.msl
index aaa0170..2463f67 100644
--- a/test/tint/builtins/gen/literal/dot/c11efe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/c11efe.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void dot_c11efe() {
   int res = 3;
 }
-float4 vertex_main_inner() {
-  dot_c11efe();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   dot_c11efe();
 }
 kernel void compute_main() {
   dot_c11efe();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  dot_c11efe();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl
index 11abe66..a685c5f 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_cd5a04(tint_module_vars_struct tint_module_vars) {
+half dot_cd5a04() {
   half res = 2.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_cd5a04(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_cd5a04(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_cd5a04();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_cd5a04(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_cd5a04();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_cd5a04();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl
index 6892417..ff43c0b 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_d0d179(tint_module_vars_struct tint_module_vars) {
+half dot_d0d179() {
   half res = 4.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_d0d179(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_d0d179(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_d0d179();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_d0d179(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_d0d179();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_d0d179();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl
index 95ce9a2..3855271 100644
--- a/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/e994c7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_e994c7(tint_module_vars_struct tint_module_vars) {
+uint dot_e994c7() {
   uint res = 4u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_e994c7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_e994c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_e994c7();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_e994c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_e994c7();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_e994c7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/eb9fbf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/eb9fbf.wgsl.expected.ir.msl
index 00d5025..0345fc2 100644
--- a/test/tint/builtins/gen/literal/dot/eb9fbf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/eb9fbf.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void dot_eb9fbf() {
   int res = 4;
 }
-float4 vertex_main_inner() {
-  dot_eb9fbf();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   dot_eb9fbf();
 }
 kernel void compute_main() {
   dot_eb9fbf();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  dot_eb9fbf();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl
index 54bd048..080a294 100644
--- a/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/ef6b1d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_ef6b1d(tint_module_vars_struct tint_module_vars) {
+int dot_ef6b1d() {
   int res = 4;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_ef6b1d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_ef6b1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_ef6b1d();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_ef6b1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_ef6b1d();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_ef6b1d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl
index 19b5e18..1728f63 100644
--- a/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/f1312c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_f1312c(tint_module_vars_struct tint_module_vars) {
+int dot_f1312c() {
   int res = 3;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_f1312c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_f1312c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_f1312c();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_f1312c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_f1312c();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_f1312c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl
index 919164c..053edcc 100644
--- a/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot/fc5f7c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot_fc5f7c(tint_module_vars_struct tint_module_vars) {
+int dot_fc5f7c() {
   int res = 2;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot_fc5f7c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_fc5f7c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_fc5f7c();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot_fc5f7c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot_fc5f7c();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot_fc5f7c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl
index a391bdc..9c05109 100644
--- a/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot4I8Packed/881e62.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot4I8Packed_881e62(tint_module_vars_struct tint_module_vars) {
+int dot4I8Packed_881e62() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot4I8Packed_881e62(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot4I8Packed_881e62(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot4I8Packed_881e62();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot4I8Packed_881e62(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot4I8Packed_881e62();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot4I8Packed_881e62();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
index 7149244..cbfdaf2 100644
--- a/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dot4U8Packed/fbed7b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void dot4U8Packed_fbed7b(tint_module_vars_struct tint_module_vars) {
+uint dot4U8Packed_fbed7b() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  dot4U8Packed_fbed7b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot4U8Packed_fbed7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot4U8Packed_fbed7b();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dot4U8Packed_fbed7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dot4U8Packed_fbed7b();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = dot4U8Packed_fbed7b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl
index cbd927c..a73db4f 100644
--- a/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/0763f7.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void dpdx_0763f7(tint_module_vars_struct tint_module_vars) {
+float3 dpdx_0763f7() {
   float3 res = dfdx(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdx_0763f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdx_0763f7();
 }
diff --git a/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl
index 462b4a7..85c5c07 100644
--- a/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/99edb1.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void dpdx_99edb1(tint_module_vars_struct tint_module_vars) {
+float2 dpdx_99edb1() {
   float2 res = dfdx(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdx_99edb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdx_99edb1();
 }
diff --git a/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl
index af128dc..8fcd7c6 100644
--- a/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/c487fa.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void dpdx_c487fa(tint_module_vars_struct tint_module_vars) {
+float4 dpdx_c487fa() {
   float4 res = dfdx(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdx_c487fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdx_c487fa();
 }
diff --git a/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl
index c2ff394..918b308 100644
--- a/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdx/e263de.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void dpdx_e263de(tint_module_vars_struct tint_module_vars) {
+float dpdx_e263de() {
   float res = dfdx(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdx_e263de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdx_e263de();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl
index 161397a..249c65c 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/029152.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void dpdxCoarse_029152(tint_module_vars_struct tint_module_vars) {
+float dpdxCoarse_029152() {
   float res = dfdx(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxCoarse_029152(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxCoarse_029152();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl
index a0dcfc5..609411e 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/9581cf.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void dpdxCoarse_9581cf(tint_module_vars_struct tint_module_vars) {
+float2 dpdxCoarse_9581cf() {
   float2 res = dfdx(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxCoarse_9581cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxCoarse_9581cf();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl
index 0a0df60..627be66 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/c28641.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void dpdxCoarse_c28641(tint_module_vars_struct tint_module_vars) {
+float4 dpdxCoarse_c28641() {
   float4 res = dfdx(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxCoarse_c28641(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxCoarse_c28641();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
index 59434db..cd84511 100644
--- a/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxCoarse/f64d7b.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void dpdxCoarse_f64d7b(tint_module_vars_struct tint_module_vars) {
+float3 dpdxCoarse_f64d7b() {
   float3 res = dfdx(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxCoarse_f64d7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxCoarse_f64d7b();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl
index f0cd37f..7629a15 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/8c5069.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void dpdxFine_8c5069(tint_module_vars_struct tint_module_vars) {
+float4 dpdxFine_8c5069() {
   float4 res = dfdx(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxFine_8c5069(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxFine_8c5069();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl
index 93634f7..9707b26 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/9631de.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void dpdxFine_9631de(tint_module_vars_struct tint_module_vars) {
+float2 dpdxFine_9631de() {
   float2 res = dfdx(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxFine_9631de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxFine_9631de();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl
index 474de4a..e47c92a 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/f401a2.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void dpdxFine_f401a2(tint_module_vars_struct tint_module_vars) {
+float dpdxFine_f401a2() {
   float res = dfdx(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxFine_f401a2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxFine_f401a2();
 }
diff --git a/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl
index 49b3b20..651d7f4 100644
--- a/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdxFine/f92fb6.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void dpdxFine_f92fb6(tint_module_vars_struct tint_module_vars) {
+float3 dpdxFine_f92fb6() {
   float3 res = dfdx(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdxFine_f92fb6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdxFine_f92fb6();
 }
diff --git a/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl
index 641133b..12fc416 100644
--- a/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/699a05.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void dpdy_699a05(tint_module_vars_struct tint_module_vars) {
+float4 dpdy_699a05() {
   float4 res = dfdy(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdy_699a05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdy_699a05();
 }
diff --git a/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl
index 4206c12..020b805 100644
--- a/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/7f8d84.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void dpdy_7f8d84(tint_module_vars_struct tint_module_vars) {
+float dpdy_7f8d84() {
   float res = dfdy(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdy_7f8d84(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdy_7f8d84();
 }
diff --git a/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl
index dca2d00..a5443f4 100644
--- a/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/a8b56e.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void dpdy_a8b56e(tint_module_vars_struct tint_module_vars) {
+float2 dpdy_a8b56e() {
   float2 res = dfdy(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdy_a8b56e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdy_a8b56e();
 }
diff --git a/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl
index 205884c..72142fb 100644
--- a/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdy/feb40f.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void dpdy_feb40f(tint_module_vars_struct tint_module_vars) {
+float3 dpdy_feb40f() {
   float3 res = dfdy(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdy_feb40f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdy_feb40f();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
index fda45d0..9348c61 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/3e1ab4.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void dpdyCoarse_3e1ab4(tint_module_vars_struct tint_module_vars) {
+float2 dpdyCoarse_3e1ab4() {
   float2 res = dfdy(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyCoarse_3e1ab4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyCoarse_3e1ab4();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl
index ba50752..244e273 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/445d24.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void dpdyCoarse_445d24(tint_module_vars_struct tint_module_vars) {
+float4 dpdyCoarse_445d24() {
   float4 res = dfdy(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyCoarse_445d24(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyCoarse_445d24();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl
index bc61b27..3a46973 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/870a7e.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void dpdyCoarse_870a7e(tint_module_vars_struct tint_module_vars) {
+float dpdyCoarse_870a7e() {
   float res = dfdy(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyCoarse_870a7e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyCoarse_870a7e();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl
index 32e6c71..6d172a5 100644
--- a/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyCoarse/ae1873.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void dpdyCoarse_ae1873(tint_module_vars_struct tint_module_vars) {
+float3 dpdyCoarse_ae1873() {
   float3 res = dfdy(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyCoarse_ae1873(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyCoarse_ae1873();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl
index e86aae6..52149d7 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/1fb7ab.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void dpdyFine_1fb7ab(tint_module_vars_struct tint_module_vars) {
+float3 dpdyFine_1fb7ab() {
   float3 res = dfdy(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyFine_1fb7ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyFine_1fb7ab();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl
index a2cadb6..48b07b8 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/6eb673.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void dpdyFine_6eb673(tint_module_vars_struct tint_module_vars) {
+float dpdyFine_6eb673() {
   float res = dfdy(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyFine_6eb673(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyFine_6eb673();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl
index b2b4047..b4e232f 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/d0a648.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void dpdyFine_d0a648(tint_module_vars_struct tint_module_vars) {
+float4 dpdyFine_d0a648() {
   float4 res = dfdy(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyFine_d0a648(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyFine_d0a648();
 }
diff --git a/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl
index 4b1b9c9..784ed9f 100644
--- a/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/dpdyFine/df33aa.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void dpdyFine_df33aa(tint_module_vars_struct tint_module_vars) {
+float2 dpdyFine_df33aa() {
   float2 res = dfdy(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  dpdyFine_df33aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = dpdyFine_df33aa();
 }
diff --git a/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl
index 6c112fc..2518322 100644
--- a/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/0f70eb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_0f70eb(tint_module_vars_struct tint_module_vars) {
+float4 exp_0f70eb() {
   float4 res = float4(2.71828174591064453125f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_0f70eb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_0f70eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_0f70eb();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_0f70eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_0f70eb();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_0f70eb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl
index 461f4d5..b64d8ae 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_13806d(tint_module_vars_struct tint_module_vars) {
+half3 exp_13806d() {
   half3 res = half3(2.716796875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_13806d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_13806d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_13806d();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_13806d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_13806d();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_13806d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl
index ad9de99..9c0a44c 100644
--- a/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/1951e7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_1951e7(tint_module_vars_struct tint_module_vars) {
+float2 exp_1951e7() {
   float2 res = float2(2.71828174591064453125f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_1951e7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_1951e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_1951e7();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_1951e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_1951e7();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_1951e7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl
index c41b585..9957652 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_2e08e2(tint_module_vars_struct tint_module_vars) {
+half2 exp_2e08e2() {
   half2 res = half2(2.716796875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_2e08e2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_2e08e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_2e08e2();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_2e08e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_2e08e2();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_2e08e2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/49e4c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/49e4c5.wgsl.expected.ir.msl
index c0bca70..54c1c60 100644
--- a/test/tint/builtins/gen/literal/exp/49e4c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/49e4c5.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp_49e4c5() {
   float res = 2.71828174591064453125f;
 }
-float4 vertex_main_inner() {
-  exp_49e4c5();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp_49e4c5();
 }
 kernel void compute_main() {
   exp_49e4c5();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp_49e4c5();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl
index eaa740a..52bc10d 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_611a87(tint_module_vars_struct tint_module_vars) {
+half4 exp_611a87() {
   half4 res = half4(2.716796875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_611a87(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_611a87(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_611a87();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_611a87(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_611a87();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_611a87();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/699629.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/699629.wgsl.expected.ir.msl
index 83613f4..ce71973 100644
--- a/test/tint/builtins/gen/literal/exp/699629.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/699629.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp_699629() {
   float2 res = float2(2.71828174591064453125f);
 }
-float4 vertex_main_inner() {
-  exp_699629();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp_699629();
 }
 kernel void compute_main() {
   exp_699629();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp_699629();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl
index 1723295..7d77254 100644
--- a/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/771fd2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_771fd2(tint_module_vars_struct tint_module_vars) {
+float exp_771fd2() {
   float res = 2.71828174591064453125f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_771fd2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_771fd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_771fd2();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_771fd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_771fd2();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_771fd2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/bda5bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/bda5bb.wgsl.expected.ir.msl
index 84232c9..a1c0daf 100644
--- a/test/tint/builtins/gen/literal/exp/bda5bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/bda5bb.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp_bda5bb() {
   float3 res = float3(2.71828174591064453125f);
 }
-float4 vertex_main_inner() {
-  exp_bda5bb();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp_bda5bb();
 }
 kernel void compute_main() {
   exp_bda5bb();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp_bda5bb();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl
index 2e30001..e14cd03 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_c18fe9(tint_module_vars_struct tint_module_vars) {
+half exp_c18fe9() {
   half res = 2.716796875h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_c18fe9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_c18fe9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_c18fe9();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_c18fe9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_c18fe9();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_c18fe9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl
index d9040d1..ce1c64c 100644
--- a/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/d98450.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp_d98450(tint_module_vars_struct tint_module_vars) {
+float3 exp_d98450() {
   float3 res = float3(2.71828174591064453125f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp_d98450(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_d98450(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_d98450();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp_d98450(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp_d98450();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp_d98450();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp/dad791.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp/dad791.wgsl.expected.ir.msl
index 98e4b3b..794211c 100644
--- a/test/tint/builtins/gen/literal/exp/dad791.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp/dad791.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp_dad791() {
   float4 res = float4(2.71828174591064453125f);
 }
-float4 vertex_main_inner() {
-  exp_dad791();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp_dad791();
 }
 kernel void compute_main() {
   exp_dad791();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp_dad791();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl
index 0db2031..fab0d2d 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_151a4c(tint_module_vars_struct tint_module_vars) {
+half2 exp2_151a4c() {
   half2 res = half2(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_151a4c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_151a4c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_151a4c();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_151a4c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_151a4c();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_151a4c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/18aa76.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/18aa76.wgsl.expected.ir.msl
index 6082182..e9bbc45 100644
--- a/test/tint/builtins/gen/literal/exp2/18aa76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/18aa76.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp2_18aa76() {
   float2 res = float2(2.0f);
 }
-float4 vertex_main_inner() {
-  exp2_18aa76();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp2_18aa76();
 }
 kernel void compute_main() {
   exp2_18aa76();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp2_18aa76();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl
index 268a6de..0d4c672 100644
--- a/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/1f8680.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_1f8680(tint_module_vars_struct tint_module_vars) {
+float3 exp2_1f8680() {
   float3 res = float3(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_1f8680(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_1f8680(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_1f8680();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_1f8680(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_1f8680();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_1f8680();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/303753.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/303753.wgsl.expected.ir.msl
index be6a662..647095e 100644
--- a/test/tint/builtins/gen/literal/exp2/303753.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/303753.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp2_303753() {
   float3 res = float3(2.0f);
 }
-float4 vertex_main_inner() {
-  exp2_303753();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp2_303753();
 }
 kernel void compute_main() {
   exp2_303753();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp2_303753();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl
index 0ac3f4f..b70a3be 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_751377(tint_module_vars_struct tint_module_vars) {
+half3 exp2_751377() {
   half3 res = half3(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_751377(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_751377(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_751377();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_751377(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_751377();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_751377();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/8bd72d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/8bd72d.wgsl.expected.ir.msl
index 306b31e..ca8dee3 100644
--- a/test/tint/builtins/gen/literal/exp2/8bd72d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/8bd72d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp2_8bd72d() {
   float4 res = float4(2.0f);
 }
-float4 vertex_main_inner() {
-  exp2_8bd72d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp2_8bd72d();
 }
 kernel void compute_main() {
   exp2_8bd72d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp2_8bd72d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl
index d37e920..549010e 100644
--- a/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/a9d0a7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_a9d0a7(tint_module_vars_struct tint_module_vars) {
+float4 exp2_a9d0a7() {
   float4 res = float4(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_a9d0a7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_a9d0a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_a9d0a7();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_a9d0a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_a9d0a7();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_a9d0a7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl
index bb28ecd..cb1c576 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_b408e4(tint_module_vars_struct tint_module_vars) {
+half exp2_b408e4() {
   half res = 2.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_b408e4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_b408e4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_b408e4();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_b408e4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_b408e4();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_b408e4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl
index 4915739..5412613 100644
--- a/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/d6777c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_d6777c(tint_module_vars_struct tint_module_vars) {
+float2 exp2_d6777c() {
   float2 res = float2(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_d6777c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_d6777c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_d6777c();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_d6777c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_d6777c();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_d6777c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl
index 68c6d87..c5a4f1b 100644
--- a/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/dea523.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_dea523(tint_module_vars_struct tint_module_vars) {
+float exp2_dea523() {
   float res = 2.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_dea523(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_dea523(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_dea523();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_dea523(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_dea523();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_dea523();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/f4f0f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/f4f0f1.wgsl.expected.ir.msl
index 2cd1047..25ba19c 100644
--- a/test/tint/builtins/gen/literal/exp2/f4f0f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/f4f0f1.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void exp2_f4f0f1() {
   float res = 2.0f;
 }
-float4 vertex_main_inner() {
-  exp2_f4f0f1();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   exp2_f4f0f1();
 }
 kernel void compute_main() {
   exp2_f4f0f1();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  exp2_f4f0f1();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl
index 9adae0a..8393822 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void exp2_ffa827(tint_module_vars_struct tint_module_vars) {
+half4 exp2_ffa827() {
   half4 res = half4(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  exp2_ffa827(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_ffa827(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_ffa827();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  exp2_ffa827(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = exp2_ffa827();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = exp2_ffa827();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl
index 66f2575..729bb8e 100644
--- a/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/12b197.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_12b197(tint_module_vars_struct tint_module_vars) {
+uint3 extractBits_12b197() {
   uint3 res = uint3(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_12b197(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_12b197(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_12b197();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_12b197(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_12b197();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_12b197();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl
index 77a825c..144fd68 100644
--- a/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/249874.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_249874(tint_module_vars_struct tint_module_vars) {
+int extractBits_249874() {
   int res = 0;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_249874(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_249874(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_249874();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_249874(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_249874();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_249874();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl
index 64544c8..c9e88db 100644
--- a/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/631377.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_631377(tint_module_vars_struct tint_module_vars) {
+uint4 extractBits_631377() {
   uint4 res = uint4(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_631377(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_631377(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_631377();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_631377(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_631377();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_631377();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl
index 17b6749..7a96720 100644
--- a/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/a99a8d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_a99a8d(tint_module_vars_struct tint_module_vars) {
+int2 extractBits_a99a8d() {
   int2 res = int2(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_a99a8d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_a99a8d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_a99a8d();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_a99a8d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_a99a8d();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_a99a8d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl
index a910804..e1650cd 100644
--- a/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/ce81f8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_ce81f8(tint_module_vars_struct tint_module_vars) {
+uint extractBits_ce81f8() {
   uint res = 0u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_ce81f8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_ce81f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_ce81f8();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_ce81f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_ce81f8();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_ce81f8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl
index 289584b..711bd7b 100644
--- a/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/e04f5d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_e04f5d(tint_module_vars_struct tint_module_vars) {
+int3 extractBits_e04f5d() {
   int3 res = int3(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_e04f5d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_e04f5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_e04f5d();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_e04f5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_e04f5d();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_e04f5d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl
index 895a671..6520e7c 100644
--- a/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/f28f69.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_f28f69(tint_module_vars_struct tint_module_vars) {
+uint2 extractBits_f28f69() {
   uint2 res = uint2(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_f28f69(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_f28f69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_f28f69();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_f28f69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_f28f69();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_f28f69();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl
index 3ad3bb9..a54bc68 100644
--- a/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/extractBits/fb850f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void extractBits_fb850f(tint_module_vars_struct tint_module_vars) {
+int4 extractBits_fb850f() {
   int4 res = int4(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  extractBits_fb850f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_fb850f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_fb850f();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  extractBits_fb850f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = extractBits_fb850f();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = extractBits_fb850f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/2c4d14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/2c4d14.wgsl.expected.ir.msl
index dabee19..4b695d6 100644
--- a/test/tint/builtins/gen/literal/faceForward/2c4d14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/2c4d14.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void faceForward_2c4d14() {
   float4 res = float4(-1.0f);
 }
-float4 vertex_main_inner() {
-  faceForward_2c4d14();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   faceForward_2c4d14();
 }
 kernel void compute_main() {
   faceForward_2c4d14();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  faceForward_2c4d14();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl
index d8d57b3..03c405f 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void faceForward_524986(tint_module_vars_struct tint_module_vars) {
+half3 faceForward_524986() {
   half3 res = half3(-1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  faceForward_524986(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_524986(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_524986();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_524986(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_524986();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = faceForward_524986();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl
index de2809c..ddff812 100644
--- a/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/5afbd5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void faceForward_5afbd5(tint_module_vars_struct tint_module_vars) {
+float3 faceForward_5afbd5() {
   float3 res = float3(-1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  faceForward_5afbd5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_5afbd5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_5afbd5();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_5afbd5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_5afbd5();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = faceForward_5afbd5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl
index 1ecee8b..6856f93 100644
--- a/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/b316e5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void faceForward_b316e5(tint_module_vars_struct tint_module_vars) {
+float4 faceForward_b316e5() {
   float4 res = float4(-1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  faceForward_b316e5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_b316e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_b316e5();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_b316e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_b316e5();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = faceForward_b316e5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/b42ef3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/b42ef3.wgsl.expected.ir.msl
index 7bd3335..07399d2 100644
--- a/test/tint/builtins/gen/literal/faceForward/b42ef3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/b42ef3.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void faceForward_b42ef3() {
   float2 res = float2(-1.0f);
 }
-float4 vertex_main_inner() {
-  faceForward_b42ef3();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   faceForward_b42ef3();
 }
 kernel void compute_main() {
   faceForward_b42ef3();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  faceForward_b42ef3();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl
index 11fa53b..1dba485 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void faceForward_cc63dc(tint_module_vars_struct tint_module_vars) {
+half4 faceForward_cc63dc() {
   half4 res = half4(-1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  faceForward_cc63dc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_cc63dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_cc63dc();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_cc63dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_cc63dc();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = faceForward_cc63dc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl
index 5b4e88a..acdde26 100644
--- a/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/e6908b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void faceForward_e6908b(tint_module_vars_struct tint_module_vars) {
+float2 faceForward_e6908b() {
   float2 res = float2(-1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  faceForward_e6908b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_e6908b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_e6908b();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_e6908b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_e6908b();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = faceForward_e6908b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl
index 50efa65..b4c8cb9 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void faceForward_fb0f2e(tint_module_vars_struct tint_module_vars) {
+half2 faceForward_fb0f2e() {
   half2 res = half2(-1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  faceForward_fb0f2e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_fb0f2e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_fb0f2e();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  faceForward_fb0f2e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = faceForward_fb0f2e();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = faceForward_fb0f2e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/faceForward/fe522b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/faceForward/fe522b.wgsl.expected.ir.msl
index 24a4d03..0f6006b 100644
--- a/test/tint/builtins/gen/literal/faceForward/fe522b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/faceForward/fe522b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void faceForward_fe522b() {
   float3 res = float3(-1.0f);
 }
-float4 vertex_main_inner() {
-  faceForward_fe522b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   faceForward_fe522b();
 }
 kernel void compute_main() {
   faceForward_fe522b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  faceForward_fe522b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl
index c0bae19..08dcd00 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/000ff3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_000ff3(tint_module_vars_struct tint_module_vars) {
+uint4 firstLeadingBit_000ff3() {
   uint4 res = uint4(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_000ff3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_000ff3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_000ff3();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_000ff3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_000ff3();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_000ff3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl
index 814fd82..c437b9d 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/35053e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_35053e(tint_module_vars_struct tint_module_vars) {
+int3 firstLeadingBit_35053e() {
   int3 res = int3(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_35053e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_35053e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_35053e();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_35053e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_35053e();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_35053e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
index 46d19f7..413e8fd 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/3fd7d0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_3fd7d0(tint_module_vars_struct tint_module_vars) {
+uint3 firstLeadingBit_3fd7d0() {
   uint3 res = uint3(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_3fd7d0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_3fd7d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_3fd7d0();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_3fd7d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_3fd7d0();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_3fd7d0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
index 7bc33f7..bc02e8f 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/57a1a3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_57a1a3(tint_module_vars_struct tint_module_vars) {
+int firstLeadingBit_57a1a3() {
   int res = 0;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_57a1a3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_57a1a3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_57a1a3();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_57a1a3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_57a1a3();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_57a1a3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl
index 2501a38..de2f791 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/6fe804.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_6fe804(tint_module_vars_struct tint_module_vars) {
+uint2 firstLeadingBit_6fe804() {
   uint2 res = uint2(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_6fe804(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_6fe804(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_6fe804();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_6fe804(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_6fe804();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_6fe804();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl
index e3bb445..1e05f67 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/a622c2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_a622c2(tint_module_vars_struct tint_module_vars) {
+int2 firstLeadingBit_a622c2() {
   int2 res = int2(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_a622c2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_a622c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_a622c2();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_a622c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_a622c2();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_a622c2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl
index baa4c04..ad9144a 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/c1f940.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_c1f940(tint_module_vars_struct tint_module_vars) {
+int4 firstLeadingBit_c1f940() {
   int4 res = int4(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_c1f940(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_c1f940(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_c1f940();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_c1f940(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_c1f940();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_c1f940();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl
index 6adf18c..34d6ead 100644
--- a/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstLeadingBit/f0779d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstLeadingBit_f0779d(tint_module_vars_struct tint_module_vars) {
+uint firstLeadingBit_f0779d() {
   uint res = 0u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstLeadingBit_f0779d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_f0779d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_f0779d();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstLeadingBit_f0779d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstLeadingBit_f0779d();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstLeadingBit_f0779d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl
index c14553e..2767265 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/110f2c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_110f2c(tint_module_vars_struct tint_module_vars) {
+uint4 firstTrailingBit_110f2c() {
   uint4 res = uint4(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_110f2c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_110f2c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_110f2c();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_110f2c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_110f2c();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_110f2c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
index 7ad7344..b25e68d 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/3a2acc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_3a2acc(tint_module_vars_struct tint_module_vars) {
+int firstTrailingBit_3a2acc() {
   int res = 0;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_3a2acc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_3a2acc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_3a2acc();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_3a2acc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_3a2acc();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_3a2acc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl
index a4022e1..6241639 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/45eb10.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_45eb10(tint_module_vars_struct tint_module_vars) {
+uint2 firstTrailingBit_45eb10() {
   uint2 res = uint2(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_45eb10(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_45eb10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_45eb10();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_45eb10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_45eb10();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_45eb10();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl
index 472096d..80320d1 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/47d475.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_47d475(tint_module_vars_struct tint_module_vars) {
+uint firstTrailingBit_47d475() {
   uint res = 0u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_47d475(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_47d475(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_47d475();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_47d475(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_47d475();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_47d475();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl
index 7cc8488..7fdcb05 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/50c072.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_50c072(tint_module_vars_struct tint_module_vars) {
+int2 firstTrailingBit_50c072() {
   int2 res = int2(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_50c072(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_50c072(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_50c072();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_50c072(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_50c072();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_50c072();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl
index e206e90..ba3e542 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/7496d6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_7496d6(tint_module_vars_struct tint_module_vars) {
+int3 firstTrailingBit_7496d6() {
   int3 res = int3(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_7496d6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_7496d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_7496d6();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_7496d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_7496d6();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_7496d6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl
index 9669528..4f56f3e 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/86551b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_86551b(tint_module_vars_struct tint_module_vars) {
+int4 firstTrailingBit_86551b() {
   int4 res = int4(0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_86551b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_86551b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_86551b();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_86551b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_86551b();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_86551b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
index 9928c33..7340ca8 100644
--- a/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/firstTrailingBit/cb51ce.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void firstTrailingBit_cb51ce(tint_module_vars_struct tint_module_vars) {
+uint3 firstTrailingBit_cb51ce() {
   uint3 res = uint3(0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  firstTrailingBit_cb51ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_cb51ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_cb51ce();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  firstTrailingBit_cb51ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = firstTrailingBit_cb51ce();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = firstTrailingBit_cb51ce();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/218952.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/218952.wgsl.expected.ir.msl
index 7f83387..476b599 100644
--- a/test/tint/builtins/gen/literal/floor/218952.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/218952.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void floor_218952() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  floor_218952();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   floor_218952();
 }
 kernel void compute_main() {
   floor_218952();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  floor_218952();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl
index 89815eb..658e1b4 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_3802c0(tint_module_vars_struct tint_module_vars) {
+half3 floor_3802c0() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_3802c0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_3802c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_3802c0();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_3802c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_3802c0();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_3802c0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl
index 25d412c..dd5f7aa 100644
--- a/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/3bccc4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_3bccc4(tint_module_vars_struct tint_module_vars) {
+float4 floor_3bccc4() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_3bccc4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_3bccc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_3bccc4();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_3bccc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_3bccc4();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_3bccc4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl
index 2027175..03ff220 100644
--- a/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/5fc9ac.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_5fc9ac(tint_module_vars_struct tint_module_vars) {
+float2 floor_5fc9ac() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_5fc9ac(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_5fc9ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_5fc9ac();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_5fc9ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_5fc9ac();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_5fc9ac();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl
index 3a68ec6..00a4a77 100644
--- a/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/60d7ea.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_60d7ea(tint_module_vars_struct tint_module_vars) {
+float3 floor_60d7ea() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_60d7ea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_60d7ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_60d7ea();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_60d7ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_60d7ea();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_60d7ea();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl
index e6a54d4..96b1b62 100644
--- a/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/66f154.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_66f154(tint_module_vars_struct tint_module_vars) {
+float floor_66f154() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_66f154(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_66f154(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_66f154();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_66f154(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_66f154();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_66f154();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl
index ba9b63c..26731aa 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_84658c(tint_module_vars_struct tint_module_vars) {
+half2 floor_84658c() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_84658c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_84658c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_84658c();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_84658c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_84658c();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_84658c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/953774.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/953774.wgsl.expected.ir.msl
index c1a72f8..9607afe 100644
--- a/test/tint/builtins/gen/literal/floor/953774.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/953774.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void floor_953774() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  floor_953774();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   floor_953774();
 }
 kernel void compute_main() {
   floor_953774();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  floor_953774();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl
index 0c09c8c..6c05151 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_a2d31b(tint_module_vars_struct tint_module_vars) {
+half4 floor_a2d31b() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_a2d31b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_a2d31b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_a2d31b();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_a2d31b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_a2d31b();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_a2d31b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl
index 46e5078..010917b 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void floor_b6e09c(tint_module_vars_struct tint_module_vars) {
+half floor_b6e09c() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  floor_b6e09c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_b6e09c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_b6e09c();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  floor_b6e09c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = floor_b6e09c();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = floor_b6e09c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/floor/dcd5a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/dcd5a2.wgsl.expected.ir.msl
index 420fb80..5c1aa7e 100644
--- a/test/tint/builtins/gen/literal/floor/dcd5a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/dcd5a2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void floor_dcd5a2() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  floor_dcd5a2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   floor_dcd5a2();
 }
 kernel void compute_main() {
   floor_dcd5a2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  floor_dcd5a2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/floor/e585ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/floor/e585ef.wgsl.expected.ir.msl
index 01e7034..97dcf99 100644
--- a/test/tint/builtins/gen/literal/floor/e585ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/floor/e585ef.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void floor_e585ef() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  floor_e585ef();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   floor_e585ef();
 }
 kernel void compute_main() {
   floor_e585ef();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  floor_e585ef();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fma/143d5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/143d5d.wgsl.expected.ir.msl
index 777c565..b35feae 100644
--- a/test/tint/builtins/gen/literal/fma/143d5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/143d5d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fma_143d5d() {
   float4 res = float4(2.0f);
 }
-float4 vertex_main_inner() {
-  fma_143d5d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fma_143d5d();
 }
 kernel void compute_main() {
   fma_143d5d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fma_143d5d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fma/1f5084.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/1f5084.wgsl.expected.ir.msl
index 9aebf4b..1ae8a61 100644
--- a/test/tint/builtins/gen/literal/fma/1f5084.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/1f5084.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fma_1f5084() {
   float2 res = float2(2.0f);
 }
-float4 vertex_main_inner() {
-  fma_1f5084();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fma_1f5084();
 }
 kernel void compute_main() {
   fma_1f5084();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fma_1f5084();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl
index 4f7d407..962b93b 100644
--- a/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/26a7a9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_26a7a9(tint_module_vars_struct tint_module_vars) {
+float2 fma_26a7a9() {
   float2 res = float2(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_26a7a9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_26a7a9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_26a7a9();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_26a7a9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_26a7a9();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_26a7a9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/466442.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/466442.wgsl.expected.ir.msl
index 3213e46..18f567c 100644
--- a/test/tint/builtins/gen/literal/fma/466442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/466442.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fma_466442() {
   float res = 2.0f;
 }
-float4 vertex_main_inner() {
-  fma_466442();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fma_466442();
 }
 kernel void compute_main() {
   fma_466442();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fma_466442();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl
index efd2017..a126a8d 100644
--- a/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/6a3283.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_6a3283(tint_module_vars_struct tint_module_vars) {
+float4 fma_6a3283() {
   float4 res = float4(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_6a3283(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_6a3283(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_6a3283();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_6a3283(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_6a3283();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_6a3283();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl
index 3ddecdc..c83c016 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_ab7818(tint_module_vars_struct tint_module_vars) {
+half4 fma_ab7818() {
   half4 res = half4(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_ab7818(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_ab7818(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_ab7818();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_ab7818(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_ab7818();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_ab7818();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl
index 13b40da..f6fa2e7 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_bf21b6(tint_module_vars_struct tint_module_vars) {
+half2 fma_bf21b6() {
   half2 res = half2(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_bf21b6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_bf21b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_bf21b6();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_bf21b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_bf21b6();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_bf21b6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl
index ab357a6..cfce320 100644
--- a/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/c10ba3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_c10ba3(tint_module_vars_struct tint_module_vars) {
+float fma_c10ba3() {
   float res = 2.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_c10ba3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_c10ba3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_c10ba3();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_c10ba3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_c10ba3();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_c10ba3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl
index 933c4f2..6c814de 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_c8abb3(tint_module_vars_struct tint_module_vars) {
+half fma_c8abb3() {
   half res = 2.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_c8abb3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_c8abb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_c8abb3();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_c8abb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_c8abb3();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_c8abb3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl
index 8072e08..a44789b 100644
--- a/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/e17c5c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_e17c5c(tint_module_vars_struct tint_module_vars) {
+float3 fma_e17c5c() {
   float3 res = float3(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_e17c5c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_e17c5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_e17c5c();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_e17c5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_e17c5c();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_e17c5c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl
index 1d6e98f..34f0de7 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fma_e7abdc(tint_module_vars_struct tint_module_vars) {
+half3 fma_e7abdc() {
   half3 res = half3(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fma_e7abdc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_e7abdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_e7abdc();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fma_e7abdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fma_e7abdc();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fma_e7abdc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fma/eb25d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fma/eb25d7.wgsl.expected.ir.msl
index 4124369..065bb48 100644
--- a/test/tint/builtins/gen/literal/fma/eb25d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fma/eb25d7.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fma_eb25d7() {
   float3 res = float3(2.0f);
 }
-float4 vertex_main_inner() {
-  fma_eb25d7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fma_eb25d7();
 }
 kernel void compute_main() {
   fma_eb25d7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fma_eb25d7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl
index 41587be..70c890e 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_181aa9(tint_module_vars_struct tint_module_vars) {
+half2 fract_181aa9() {
   half2 res = half2(0.25h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_181aa9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_181aa9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_181aa9();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_181aa9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_181aa9();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_181aa9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/2eddfe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/2eddfe.wgsl.expected.ir.msl
index d8d8fb8..0c91dce 100644
--- a/test/tint/builtins/gen/literal/fract/2eddfe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/2eddfe.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fract_2eddfe() {
   float res = 0.25f;
 }
-float4 vertex_main_inner() {
-  fract_2eddfe();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fract_2eddfe();
 }
 kernel void compute_main() {
   fract_2eddfe();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fract_2eddfe();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl
index 16d2228..1c2efc9 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_498c77(tint_module_vars_struct tint_module_vars) {
+half4 fract_498c77() {
   half4 res = half4(0.25h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_498c77(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_498c77(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_498c77();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_498c77(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_498c77();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_498c77();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/7e3f2d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/7e3f2d.wgsl.expected.ir.msl
index 7a03b9d..03b75b5 100644
--- a/test/tint/builtins/gen/literal/fract/7e3f2d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/7e3f2d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fract_7e3f2d() {
   float4 res = float4(0.25f);
 }
-float4 vertex_main_inner() {
-  fract_7e3f2d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fract_7e3f2d();
 }
 kernel void compute_main() {
   fract_7e3f2d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fract_7e3f2d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl
index 6f8fd78..f032f25 100644
--- a/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/8bc1e9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_8bc1e9(tint_module_vars_struct tint_module_vars) {
+float4 fract_8bc1e9() {
   float4 res = float4(0.25f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_8bc1e9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_8bc1e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_8bc1e9();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_8bc1e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_8bc1e9();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_8bc1e9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl
index b562baa..bb121c1 100644
--- a/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/943cb1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_943cb1(tint_module_vars_struct tint_module_vars) {
+float2 fract_943cb1() {
   float2 res = float2(0.25f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_943cb1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_943cb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_943cb1();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_943cb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_943cb1();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_943cb1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl
index f8a5f65..ea8ebc4 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_958a1d(tint_module_vars_struct tint_module_vars) {
+half3 fract_958a1d() {
   half3 res = half3(0.25h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_958a1d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_958a1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_958a1d();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_958a1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_958a1d();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_958a1d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl
index f6fb2f1..fbacdc9 100644
--- a/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/a49758.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_a49758(tint_module_vars_struct tint_module_vars) {
+float3 fract_a49758() {
   float3 res = float3(0.25f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_a49758(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_a49758(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_a49758();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_a49758(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_a49758();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_a49758();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl
index aa51cbd..cd9ee93 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_eb38ce(tint_module_vars_struct tint_module_vars) {
+half fract_eb38ce() {
   half res = 0.25h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_eb38ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_eb38ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_eb38ce();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_eb38ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_eb38ce();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_eb38ce();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/fract/ed00ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/ed00ca.wgsl.expected.ir.msl
index 5ae3b99..429fa4f 100644
--- a/test/tint/builtins/gen/literal/fract/ed00ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/ed00ca.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fract_ed00ca() {
   float2 res = float2(0.25f);
 }
-float4 vertex_main_inner() {
-  fract_ed00ca();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fract_ed00ca();
 }
 kernel void compute_main() {
   fract_ed00ca();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fract_ed00ca();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fract/ed2f79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/ed2f79.wgsl.expected.ir.msl
index 5819b89..b52dab9 100644
--- a/test/tint/builtins/gen/literal/fract/ed2f79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/ed2f79.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void fract_ed2f79() {
   float3 res = float3(0.25f);
 }
-float4 vertex_main_inner() {
-  fract_ed2f79();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   fract_ed2f79();
 }
 kernel void compute_main() {
   fract_ed2f79();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  fract_ed2f79();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl
index 90334b9..f066345 100644
--- a/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fract/fa5c71.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void fract_fa5c71(tint_module_vars_struct tint_module_vars) {
+float fract_fa5c71() {
   float res = 0.25f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  fract_fa5c71(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_fa5c71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_fa5c71();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fract_fa5c71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fract_fa5c71();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = fract_fa5c71();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/34bbfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/34bbfb.wgsl.expected.ir.msl
index 1cf70dc..f6de3e5 100644
--- a/test/tint/builtins/gen/literal/frexp/34bbfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/34bbfb.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float4 fract;
   int4 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_34bbfb() {
   frexp_result_vec4_f32 res = frexp_result_vec4_f32{.fract=float4(0.5f), .exp=int4(1)};
 }
-float4 vertex_main_inner() {
-  frexp_34bbfb();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_34bbfb();
 }
 kernel void compute_main() {
   frexp_34bbfb();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_34bbfb();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.ir.msl
index a27759f..876736d 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half4 fract;
   int4 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_3dd21e() {
   frexp_result_vec4_f16 res = frexp_result_vec4_f16{.fract=half4(0.5h), .exp=int4(1)};
 }
-float4 vertex_main_inner() {
-  frexp_3dd21e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_3dd21e();
 }
 kernel void compute_main() {
   frexp_3dd21e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_3dd21e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.ir.msl
index 577214c..dc084ad 100644
--- a/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float fract;
   int exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_4b2200() {
   frexp_result_f32 res = frexp_result_f32{.fract=0.5f, .exp=1};
 }
-float4 vertex_main_inner() {
-  frexp_4b2200();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_4b2200();
 }
 kernel void compute_main() {
   frexp_4b2200();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_4b2200();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.ir.msl
index 604d29a..cb2713a 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half fract;
   int exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_5257dd() {
   frexp_result_f16 res = frexp_result_f16{.fract=0.5h, .exp=1};
 }
-float4 vertex_main_inner() {
-  frexp_5257dd();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_5257dd();
 }
 kernel void compute_main() {
   frexp_5257dd();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_5257dd();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.ir.msl
index d74f273..15e0453 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half2 fract;
   int2 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_5f47bf() {
   frexp_result_vec2_f16 res = frexp_result_vec2_f16{.fract=half2(0.5h), .exp=int2(1)};
 }
-float4 vertex_main_inner() {
-  frexp_5f47bf();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_5f47bf();
 }
 kernel void compute_main() {
   frexp_5f47bf();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_5f47bf();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/6fb3ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/6fb3ad.wgsl.expected.ir.msl
index 0809aac..217bc17 100644
--- a/test/tint/builtins/gen/literal/frexp/6fb3ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/6fb3ad.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float2 fract;
   int2 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_6fb3ad() {
   frexp_result_vec2_f32 res = frexp_result_vec2_f32{.fract=float2(0.5f), .exp=int2(1)};
 }
-float4 vertex_main_inner() {
-  frexp_6fb3ad();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_6fb3ad();
 }
 kernel void compute_main() {
   frexp_6fb3ad();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_6fb3ad();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.ir.msl
index 693222d..7214c3b 100644
--- a/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float4 fract;
   int4 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_77af93() {
   frexp_result_vec4_f32 res = frexp_result_vec4_f32{.fract=float4(0.5f), .exp=int4(1)};
 }
-float4 vertex_main_inner() {
-  frexp_77af93();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_77af93();
 }
 kernel void compute_main() {
   frexp_77af93();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_77af93();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.ir.msl
index 7bd1206..69ff814 100644
--- a/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float3 fract;
   int3 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_979800() {
   frexp_result_vec3_f32 res = frexp_result_vec3_f32{.fract=float3(0.5f), .exp=int3(1)};
 }
-float4 vertex_main_inner() {
-  frexp_979800();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_979800();
 }
 kernel void compute_main() {
   frexp_979800();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_979800();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.ir.msl
index 0840ed2..3851334 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half3 fract;
   int3 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_ae4a66() {
   frexp_result_vec3_f16 res = frexp_result_vec3_f16{.fract=half3(0.5h), .exp=int3(1)};
 }
-float4 vertex_main_inner() {
-  frexp_ae4a66();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_ae4a66();
 }
 kernel void compute_main() {
   frexp_ae4a66();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_ae4a66();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/bee870.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/bee870.wgsl.expected.ir.msl
index 8633101..686b472 100644
--- a/test/tint/builtins/gen/literal/frexp/bee870.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/bee870.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float fract;
   int exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_bee870() {
   frexp_result_f32 res = frexp_result_f32{.fract=0.5f, .exp=1};
 }
-float4 vertex_main_inner() {
-  frexp_bee870();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_bee870();
 }
 kernel void compute_main() {
   frexp_bee870();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_bee870();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/bf45ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/bf45ae.wgsl.expected.ir.msl
index 53da86c..9a3848d 100644
--- a/test/tint/builtins/gen/literal/frexp/bf45ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/bf45ae.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float3 fract;
   int3 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_bf45ae() {
   frexp_result_vec3_f32 res = frexp_result_vec3_f32{.fract=float3(0.5f), .exp=int3(1)};
 }
-float4 vertex_main_inner() {
-  frexp_bf45ae();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_bf45ae();
 }
 kernel void compute_main() {
   frexp_bf45ae();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_bf45ae();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.ir.msl
index 52c4bc3..433be29 100644
--- a/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float2 fract;
   int2 exp;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void frexp_eb2421() {
   frexp_result_vec2_f32 res = frexp_result_vec2_f32{.fract=float2(0.5f), .exp=int2(1)};
 }
-float4 vertex_main_inner() {
-  frexp_eb2421();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   frexp_eb2421();
 }
 kernel void compute_main() {
   frexp_eb2421();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  frexp_eb2421();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl
index e1cf7ec..52a8551 100644
--- a/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/5d1b39.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void fwidth_5d1b39(tint_module_vars_struct tint_module_vars) {
+float3 fwidth_5d1b39() {
   float3 res = fwidth(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidth_5d1b39(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidth_5d1b39();
 }
diff --git a/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl
index f27b6d6..69ebe9e 100644
--- a/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/b83ebb.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void fwidth_b83ebb(tint_module_vars_struct tint_module_vars) {
+float2 fwidth_b83ebb() {
   float2 res = fwidth(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidth_b83ebb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidth_b83ebb();
 }
diff --git a/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl
index 5fb4ac4..e69693e 100644
--- a/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/d2ab9a.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void fwidth_d2ab9a(tint_module_vars_struct tint_module_vars) {
+float4 fwidth_d2ab9a() {
   float4 res = fwidth(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidth_d2ab9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidth_d2ab9a();
 }
diff --git a/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl
index 7d041fa..4726e0e 100644
--- a/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidth/df38ef.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void fwidth_df38ef(tint_module_vars_struct tint_module_vars) {
+float fwidth_df38ef() {
   float res = fwidth(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidth_df38ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidth_df38ef();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl
index 740f73a..6de6d6c 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/159c8a.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void fwidthCoarse_159c8a(tint_module_vars_struct tint_module_vars) {
+float fwidthCoarse_159c8a() {
   float res = fwidth(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthCoarse_159c8a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthCoarse_159c8a();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
index eff4a8e..8da76b4 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/1e59d9.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void fwidthCoarse_1e59d9(tint_module_vars_struct tint_module_vars) {
+float3 fwidthCoarse_1e59d9() {
   float3 res = fwidth(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthCoarse_1e59d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthCoarse_1e59d9();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
index 8bc1664..62f8861 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/4e4fc4.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void fwidthCoarse_4e4fc4(tint_module_vars_struct tint_module_vars) {
+float4 fwidthCoarse_4e4fc4() {
   float4 res = fwidth(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthCoarse_4e4fc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthCoarse_4e4fc4();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl
index a872692..705bb91 100644
--- a/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthCoarse/e653f7.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void fwidthCoarse_e653f7(tint_module_vars_struct tint_module_vars) {
+float2 fwidthCoarse_e653f7() {
   float2 res = fwidth(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthCoarse_e653f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthCoarse_e653f7();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl
index 994d97a..4aa7fc3 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/523fdc.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float3* prevent_dce;
 };
 
-void fwidthFine_523fdc(tint_module_vars_struct tint_module_vars) {
+float3 fwidthFine_523fdc() {
   float3 res = fwidth(float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthFine_523fdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthFine_523fdc();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl
index 3c270a1..dc10cb6 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/68f4ef.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float4* prevent_dce;
 };
 
-void fwidthFine_68f4ef(tint_module_vars_struct tint_module_vars) {
+float4 fwidthFine_68f4ef() {
   float4 res = fwidth(float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthFine_68f4ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthFine_68f4ef();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl
index 1a13cc6..b3b5a69 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/f1742d.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float* prevent_dce;
 };
 
-void fwidthFine_f1742d(tint_module_vars_struct tint_module_vars) {
+float fwidthFine_f1742d() {
   float res = fwidth(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthFine_f1742d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthFine_f1742d();
 }
diff --git a/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl
index 140b85a..33c5565 100644
--- a/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/fwidthFine/ff6aa0.wgsl.expected.ir.msl
@@ -4,11 +4,11 @@
   device float2* prevent_dce;
 };
 
-void fwidthFine_ff6aa0(tint_module_vars_struct tint_module_vars) {
+float2 fwidthFine_ff6aa0() {
   float2 res = fwidth(float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  fwidthFine_ff6aa0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = fwidthFine_ff6aa0();
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl
index 025a64e..ea465b7 100644
--- a/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/3c7ba5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_3c7ba5(tint_module_vars_struct tint_module_vars) {
+uint2 insertBits_3c7ba5() {
   uint2 res = uint2(3u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_3c7ba5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_3c7ba5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_3c7ba5();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_3c7ba5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_3c7ba5();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_3c7ba5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl
index 74bc91d..cf0c6eb 100644
--- a/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/428b0b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_428b0b(tint_module_vars_struct tint_module_vars) {
+int3 insertBits_428b0b() {
   int3 res = int3(3);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_428b0b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_428b0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_428b0b();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_428b0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_428b0b();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_428b0b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl
index 8da6407..4c14d21 100644
--- a/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/51ede1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_51ede1(tint_module_vars_struct tint_module_vars) {
+uint4 insertBits_51ede1() {
   uint4 res = uint4(3u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_51ede1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_51ede1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_51ede1();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_51ede1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_51ede1();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_51ede1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl
index 525295b..119940b 100644
--- a/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/65468b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_65468b(tint_module_vars_struct tint_module_vars) {
+int insertBits_65468b() {
   int res = 3;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_65468b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_65468b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_65468b();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_65468b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_65468b();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_65468b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl
index 45e9a04..6fdc329 100644
--- a/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/87826b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_87826b(tint_module_vars_struct tint_module_vars) {
+uint3 insertBits_87826b() {
   uint3 res = uint3(3u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_87826b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_87826b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_87826b();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_87826b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_87826b();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_87826b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl
index b48dee6..96c8d16 100644
--- a/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/d86978.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_d86978(tint_module_vars_struct tint_module_vars) {
+int4 insertBits_d86978() {
   int4 res = int4(3);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_d86978(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_d86978(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_d86978();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_d86978(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_d86978();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_d86978();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl
index b3a835a..0ba1084 100644
--- a/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/e3e3a2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_e3e3a2(tint_module_vars_struct tint_module_vars) {
+uint insertBits_e3e3a2() {
   uint res = 3u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_e3e3a2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_e3e3a2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_e3e3a2();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_e3e3a2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_e3e3a2();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_e3e3a2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl
index 7ebe0b9..cc602bc 100644
--- a/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/insertBits/fe6ba6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void insertBits_fe6ba6(tint_module_vars_struct tint_module_vars) {
+int2 insertBits_fe6ba6() {
   int2 res = int2(3);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  insertBits_fe6ba6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_fe6ba6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_fe6ba6();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  insertBits_fe6ba6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = insertBits_fe6ba6();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = insertBits_fe6ba6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/07a6fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/07a6fe.wgsl.expected.ir.msl
index c24c428..f53dd2a 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/07a6fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/07a6fe.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void inverseSqrt_07a6fe() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  inverseSqrt_07a6fe();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   inverseSqrt_07a6fe();
 }
 kernel void compute_main() {
   inverseSqrt_07a6fe();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  inverseSqrt_07a6fe();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl
index ebfb28d..b82379d 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_440300(tint_module_vars_struct tint_module_vars) {
+half inverseSqrt_440300() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_440300(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_440300(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_440300();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_440300(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_440300();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_440300();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/4ca6d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/4ca6d6.wgsl.expected.ir.msl
index d8fcd78..572ac48 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/4ca6d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/4ca6d6.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void inverseSqrt_4ca6d6() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  inverseSqrt_4ca6d6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   inverseSqrt_4ca6d6();
 }
 kernel void compute_main() {
   inverseSqrt_4ca6d6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  inverseSqrt_4ca6d6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl
index eb4f478..b9d4f05 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_5f51f8(tint_module_vars_struct tint_module_vars) {
+half2 inverseSqrt_5f51f8() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_5f51f8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_5f51f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_5f51f8();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_5f51f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_5f51f8();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_5f51f8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/6d0783.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/6d0783.wgsl.expected.ir.msl
index 63da1f7..49bd719 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/6d0783.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/6d0783.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void inverseSqrt_6d0783() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  inverseSqrt_6d0783();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   inverseSqrt_6d0783();
 }
 kernel void compute_main() {
   inverseSqrt_6d0783();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  inverseSqrt_6d0783();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl
index c96f17c..324ab62 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/84407e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_84407e(tint_module_vars_struct tint_module_vars) {
+float inverseSqrt_84407e() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_84407e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_84407e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_84407e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_84407e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_84407e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_84407e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
index 5d362e8..a7de3d2 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/8f2bd2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_8f2bd2(tint_module_vars_struct tint_module_vars) {
+float2 inverseSqrt_8f2bd2() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_8f2bd2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_8f2bd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_8f2bd2();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_8f2bd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_8f2bd2();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_8f2bd2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl
index ace76dd..3dad6f3 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b197b1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_b197b1(tint_module_vars_struct tint_module_vars) {
+float3 inverseSqrt_b197b1() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_b197b1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_b197b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_b197b1();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_b197b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_b197b1();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_b197b1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl
index a54957f..36eb460 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_b85ebd(tint_module_vars_struct tint_module_vars) {
+half3 inverseSqrt_b85ebd() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_b85ebd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_b85ebd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_b85ebd();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_b85ebd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_b85ebd();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_b85ebd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl
index d43e1a4..bd388c0 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/c22347.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_c22347(tint_module_vars_struct tint_module_vars) {
+float4 inverseSqrt_c22347() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_c22347(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_c22347(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_c22347();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_c22347(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_c22347();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_c22347();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl
index 3cde832..526d5b5 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void inverseSqrt_cbdc70(tint_module_vars_struct tint_module_vars) {
+half4 inverseSqrt_cbdc70() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  inverseSqrt_cbdc70(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_cbdc70(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_cbdc70();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  inverseSqrt_cbdc70(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = inverseSqrt_cbdc70();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = inverseSqrt_cbdc70();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/f60c1c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/inverseSqrt/f60c1c.wgsl.expected.ir.msl
index a249e85..849f7b8 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/f60c1c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/f60c1c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void inverseSqrt_f60c1c() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  inverseSqrt_f60c1c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   inverseSqrt_f60c1c();
 }
 kernel void compute_main() {
   inverseSqrt_f60c1c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  inverseSqrt_f60c1c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl
index 42b52e3..d4f5fdf 100644
--- a/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/082c1f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_082c1f(tint_module_vars_struct tint_module_vars) {
+half ldexp_082c1f() {
   half res = 2.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_082c1f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_082c1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_082c1f();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_082c1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_082c1f();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_082c1f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl
index edf59e4..3910d37 100644
--- a/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/217a31.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_217a31(tint_module_vars_struct tint_module_vars) {
+half2 ldexp_217a31() {
   half2 res = half2(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_217a31(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_217a31(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_217a31();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_217a31(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_217a31();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_217a31();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/2bfc68.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/2bfc68.wgsl.expected.ir.msl
index b030d7a..5761c2e 100644
--- a/test/tint/builtins/gen/literal/ldexp/2bfc68.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/2bfc68.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_2bfc68() {
   float2 res = float2(2.0f);
 }
-float4 vertex_main_inner() {
-  ldexp_2bfc68();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_2bfc68();
 }
 kernel void compute_main() {
   ldexp_2bfc68();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_2bfc68();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/2c6370.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/2c6370.wgsl.expected.ir.msl
index f84945c..39729af 100644
--- a/test/tint/builtins/gen/literal/ldexp/2c6370.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/2c6370.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_2c6370() {
   float2 res = float2(2.0f);
 }
-float4 vertex_main_inner() {
-  ldexp_2c6370();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_2c6370();
 }
 kernel void compute_main() {
   ldexp_2c6370();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_2c6370();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/376938.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/376938.wgsl.expected.ir.msl
index 36e037f..b2b0d28 100644
--- a/test/tint/builtins/gen/literal/ldexp/376938.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/376938.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_376938() {
   float4 res = float4(2.0f);
 }
-float4 vertex_main_inner() {
-  ldexp_376938();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_376938();
 }
 kernel void compute_main() {
   ldexp_376938();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_376938();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl
index 022ae53..7e0a658 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_3d90b4(tint_module_vars_struct tint_module_vars) {
+half2 ldexp_3d90b4() {
   half2 res = half2(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_3d90b4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_3d90b4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_3d90b4();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_3d90b4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_3d90b4();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_3d90b4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/4a3ad9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/4a3ad9.wgsl.expected.ir.msl
index 594f264..5e754bc 100644
--- a/test/tint/builtins/gen/literal/ldexp/4a3ad9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/4a3ad9.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_4a3ad9() {
   float3 res = float3(2.0f);
 }
-float4 vertex_main_inner() {
-  ldexp_4a3ad9();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_4a3ad9();
 }
 kernel void compute_main() {
   ldexp_4a3ad9();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_4a3ad9();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl
index 99d8408..be49b52 100644
--- a/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/593ff3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_593ff3(tint_module_vars_struct tint_module_vars) {
+float3 ldexp_593ff3() {
   float3 res = float3(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_593ff3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_593ff3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_593ff3();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_593ff3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_593ff3();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_593ff3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl
index db988df..7bc9e43 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_624e0c(tint_module_vars_struct tint_module_vars) {
+half ldexp_624e0c() {
   half res = 2.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_624e0c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_624e0c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_624e0c();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_624e0c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_624e0c();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_624e0c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl
index 3969743..c4af449 100644
--- a/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/65a7bd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_65a7bd(tint_module_vars_struct tint_module_vars) {
+float4 ldexp_65a7bd() {
   float4 res = float4(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_65a7bd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_65a7bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_65a7bd();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_65a7bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_65a7bd();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_65a7bd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/71ebe3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/71ebe3.wgsl.expected.ir.msl
index 8a56b40..93ede14 100644
--- a/test/tint/builtins/gen/literal/ldexp/71ebe3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/71ebe3.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_71ebe3() {
   float res = 2.0f;
 }
-float4 vertex_main_inner() {
-  ldexp_71ebe3();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_71ebe3();
 }
 kernel void compute_main() {
   ldexp_71ebe3();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_71ebe3();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl
index 3312682..68d8878 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_7485ce(tint_module_vars_struct tint_module_vars) {
+half3 ldexp_7485ce() {
   half3 res = half3(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_7485ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_7485ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_7485ce();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_7485ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_7485ce();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_7485ce();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl
index 5a97a43..55bd478 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_7fa13c(tint_module_vars_struct tint_module_vars) {
+half4 ldexp_7fa13c() {
   half4 res = half4(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_7fa13c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_7fa13c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_7fa13c();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_7fa13c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_7fa13c();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_7fa13c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl
index 3d18708..ad382fd 100644
--- a/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/8a0c2f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_8a0c2f(tint_module_vars_struct tint_module_vars) {
+half4 ldexp_8a0c2f() {
   half4 res = half4(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_8a0c2f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_8a0c2f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_8a0c2f();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_8a0c2f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_8a0c2f();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_8a0c2f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl
index b2c232d..344a607 100644
--- a/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/8e43e9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_8e43e9(tint_module_vars_struct tint_module_vars) {
+half3 ldexp_8e43e9() {
   half3 res = half3(2.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_8e43e9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_8e43e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_8e43e9();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_8e43e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_8e43e9();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_8e43e9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl
index e183ab8..a3fe9e9 100644
--- a/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/a22679.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_a22679(tint_module_vars_struct tint_module_vars) {
+float2 ldexp_a22679() {
   float2 res = float2(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_a22679(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_a22679(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_a22679();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_a22679(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_a22679();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_a22679();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl
index 7b4464b..f1770cb 100644
--- a/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/a31cdc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_a31cdc(tint_module_vars_struct tint_module_vars) {
+float3 ldexp_a31cdc() {
   float3 res = float3(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_a31cdc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_a31cdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_a31cdc();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_a31cdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_a31cdc();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_a31cdc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/a6126e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/a6126e.wgsl.expected.ir.msl
index 8a4ee03..e1dbb25 100644
--- a/test/tint/builtins/gen/literal/ldexp/a6126e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/a6126e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_a6126e() {
   float3 res = float3(2.0f);
 }
-float4 vertex_main_inner() {
-  ldexp_a6126e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_a6126e();
 }
 kernel void compute_main() {
   ldexp_a6126e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_a6126e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl
index 19eae46..f01d340 100644
--- a/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/abd718.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_abd718(tint_module_vars_struct tint_module_vars) {
+float2 ldexp_abd718() {
   float2 res = float2(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_abd718(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_abd718(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_abd718();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_abd718(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_abd718();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_abd718();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl
index 0f800ee..df80869 100644
--- a/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/c9d0b7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_c9d0b7(tint_module_vars_struct tint_module_vars) {
+float ldexp_c9d0b7() {
   float res = 2.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_c9d0b7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_c9d0b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_c9d0b7();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_c9d0b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_c9d0b7();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_c9d0b7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/cb0faf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/cb0faf.wgsl.expected.ir.msl
index 37ff2f6..6c01b4b 100644
--- a/test/tint/builtins/gen/literal/ldexp/cb0faf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/cb0faf.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_cb0faf() {
   float4 res = float4(2.0f);
 }
-float4 vertex_main_inner() {
-  ldexp_cb0faf();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_cb0faf();
 }
 kernel void compute_main() {
   ldexp_cb0faf();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_cb0faf();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl
index 2918126..2ea3f5a 100644
--- a/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/cc9cde.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_cc9cde(tint_module_vars_struct tint_module_vars) {
+float4 ldexp_cc9cde() {
   float4 res = float4(2.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_cc9cde(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_cc9cde(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_cc9cde();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_cc9cde(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_cc9cde();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_cc9cde();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl
index d97e045..3045179 100644
--- a/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/db8b49.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void ldexp_db8b49(tint_module_vars_struct tint_module_vars) {
+float ldexp_db8b49() {
   float res = 2.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  ldexp_db8b49(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_db8b49(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_db8b49();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  ldexp_db8b49(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = ldexp_db8b49();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = ldexp_db8b49();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/ldexp/fdbc7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/ldexp/fdbc7b.wgsl.expected.ir.msl
index 18635e0..caf3cb2 100644
--- a/test/tint/builtins/gen/literal/ldexp/fdbc7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/ldexp/fdbc7b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void ldexp_fdbc7b() {
   float res = 2.0f;
 }
-float4 vertex_main_inner() {
-  ldexp_fdbc7b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   ldexp_fdbc7b();
 }
 kernel void compute_main() {
   ldexp_fdbc7b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  ldexp_fdbc7b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl
index 69eb25e..65d3cb3 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_056071(tint_module_vars_struct tint_module_vars) {
+float length_056071() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_056071(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_056071(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_056071();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_056071(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_056071();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_056071();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl
index 9ef7abd..4ef81c8 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_3f0e13(tint_module_vars_struct tint_module_vars) {
+half length_3f0e13() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_3f0e13(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_3f0e13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_3f0e13();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_3f0e13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_3f0e13();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_3f0e13();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.ir.msl
index 485300c..ad7b451 100644
--- a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void length_555aba() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  length_555aba();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   length_555aba();
 }
 kernel void compute_main() {
   length_555aba();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  length_555aba();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl
index 73b688d..26369f1 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_5b1a9b(tint_module_vars_struct tint_module_vars) {
+half length_5b1a9b() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_5b1a9b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_5b1a9b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_5b1a9b();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_5b1a9b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_5b1a9b();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_5b1a9b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl
index 5439001..d1179a1 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_602a17(tint_module_vars_struct tint_module_vars) {
+float length_602a17() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_602a17(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_602a17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_602a17();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_602a17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_602a17();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_602a17();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.ir.msl
index 814a53c..2be4969 100644
--- a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void length_7b4741() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  length_7b4741();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   length_7b4741();
 }
 kernel void compute_main() {
   length_7b4741();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  length_7b4741();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.ir.msl
index 59b7982..ee24576 100644
--- a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void length_936ad5() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  length_936ad5();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   length_936ad5();
 }
 kernel void compute_main() {
   length_936ad5();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  length_936ad5();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl
index 22b4966..3c81012 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_afde8b(tint_module_vars_struct tint_module_vars) {
+float length_afde8b() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_afde8b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_afde8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_afde8b();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_afde8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_afde8b();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_afde8b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl
index f2e88c5..9291fd8 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_ba16d6(tint_module_vars_struct tint_module_vars) {
+half length_ba16d6() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_ba16d6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_ba16d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_ba16d6();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_ba16d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_ba16d6();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_ba16d6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl
index cdbe531..dd9eb67 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_becebf(tint_module_vars_struct tint_module_vars) {
+float length_becebf() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_becebf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_becebf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_becebf();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_becebf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_becebf();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_becebf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl
index 6b6ed57..1a7dbcf 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void length_c158da(tint_module_vars_struct tint_module_vars) {
+half length_c158da() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  length_c158da(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_c158da(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_c158da();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  length_c158da(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = length_c158da();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = length_c158da();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.ir.msl
index 40ffd01..75f127a 100644
--- a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void length_c2c544() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  length_c2c544();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   length_c2c544();
 }
 kernel void compute_main() {
   length_c2c544();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  length_c2c544();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl
index eff8e3e..d5fad97 100644
--- a/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/3da25a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_3da25a(tint_module_vars_struct tint_module_vars) {
+float4 log_3da25a() {
   float4 res = float4(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_3da25a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_3da25a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_3da25a();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_3da25a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_3da25a();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_3da25a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/655989.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/655989.wgsl.expected.ir.msl
index a584cd9..646df4e 100644
--- a/test/tint/builtins/gen/literal/log/655989.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/655989.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log_655989() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  log_655989();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log_655989();
 }
 kernel void compute_main() {
   log_655989();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log_655989();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log/697e1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/697e1d.wgsl.expected.ir.msl
index 881bee2..23ba7de 100644
--- a/test/tint/builtins/gen/literal/log/697e1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/697e1d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log_697e1d() {
   float4 res = float4(0.0f);
 }
-float4 vertex_main_inner() {
-  log_697e1d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log_697e1d();
 }
 kernel void compute_main() {
   log_697e1d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log_697e1d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl
index 92c83b7..39378cc 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_6ff86f(tint_module_vars_struct tint_module_vars) {
+half3 log_6ff86f() {
   half3 res = half3(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_6ff86f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_6ff86f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_6ff86f();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_6ff86f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_6ff86f();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_6ff86f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl
index b6cd665..2c802d7 100644
--- a/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/7114a6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_7114a6(tint_module_vars_struct tint_module_vars) {
+float log_7114a6() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_7114a6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_7114a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_7114a6();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_7114a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_7114a6();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_7114a6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl
index b5113e5..2f44166 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_8f0e32(tint_module_vars_struct tint_module_vars) {
+half2 log_8f0e32() {
   half2 res = half2(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_8f0e32(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_8f0e32(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_8f0e32();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_8f0e32(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_8f0e32();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_8f0e32();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl
index df54301..ea0e24c 100644
--- a/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/b2ce28.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_b2ce28(tint_module_vars_struct tint_module_vars) {
+float2 log_b2ce28() {
   float2 res = float2(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_b2ce28(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_b2ce28(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_b2ce28();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_b2ce28(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_b2ce28();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_b2ce28();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/b8088d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/b8088d.wgsl.expected.ir.msl
index 8776f7b..18d6c02 100644
--- a/test/tint/builtins/gen/literal/log/b8088d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/b8088d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log_b8088d() {
   float3 res = float3(0.0f);
 }
-float4 vertex_main_inner() {
-  log_b8088d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log_b8088d();
 }
 kernel void compute_main() {
   log_b8088d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log_b8088d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl
index ebb70b6..f75ae2c 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_c9f489(tint_module_vars_struct tint_module_vars) {
+half log_c9f489() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_c9f489(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_c9f489(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_c9f489();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_c9f489(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_c9f489();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_c9f489();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl
index 3ce56d5..ef541b5 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_cdbdc1(tint_module_vars_struct tint_module_vars) {
+half4 log_cdbdc1() {
   half4 res = half4(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_cdbdc1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_cdbdc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_cdbdc1();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_cdbdc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_cdbdc1();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_cdbdc1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl
index 7abc01a..3e176a5 100644
--- a/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/f4c570.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log_f4c570(tint_module_vars_struct tint_module_vars) {
+float3 log_f4c570() {
   float3 res = float3(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log_f4c570(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_f4c570(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_f4c570();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log_f4c570(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log_f4c570();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log_f4c570();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log/f60cc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log/f60cc7.wgsl.expected.ir.msl
index dd50d4e..f5fd1d1 100644
--- a/test/tint/builtins/gen/literal/log/f60cc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log/f60cc7.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log_f60cc7() {
   float2 res = float2(0.0f);
 }
-float4 vertex_main_inner() {
-  log_f60cc7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log_f60cc7();
 }
 kernel void compute_main() {
   log_f60cc7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log_f60cc7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log2/0fbd39.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/0fbd39.wgsl.expected.ir.msl
index 710a990..9e8a073 100644
--- a/test/tint/builtins/gen/literal/log2/0fbd39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/0fbd39.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log2_0fbd39() {
   float3 res = float3(0.0f);
 }
-float4 vertex_main_inner() {
-  log2_0fbd39();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log2_0fbd39();
 }
 kernel void compute_main() {
   log2_0fbd39();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log2_0fbd39();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl
index 1c3dc99..0338040 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_38b478(tint_module_vars_struct tint_module_vars) {
+half3 log2_38b478() {
   half3 res = half3(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_38b478(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_38b478(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_38b478();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_38b478(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_38b478();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_38b478();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl
index ceab242..be9fc8a 100644
--- a/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/4036ed.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_4036ed(tint_module_vars_struct tint_module_vars) {
+float log2_4036ed() {
   float res = 0.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_4036ed(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_4036ed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_4036ed();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_4036ed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_4036ed();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_4036ed();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/5b464b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/5b464b.wgsl.expected.ir.msl
index b259388..4ef82f3 100644
--- a/test/tint/builtins/gen/literal/log2/5b464b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/5b464b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log2_5b464b() {
   float res = 0.0f;
 }
-float4 vertex_main_inner() {
-  log2_5b464b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log2_5b464b();
 }
 kernel void compute_main() {
   log2_5b464b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log2_5b464b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log2/6b8954.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/6b8954.wgsl.expected.ir.msl
index e0fc072..20f4800 100644
--- a/test/tint/builtins/gen/literal/log2/6b8954.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/6b8954.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log2_6b8954() {
   float2 res = float2(0.0f);
 }
-float4 vertex_main_inner() {
-  log2_6b8954();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log2_6b8954();
 }
 kernel void compute_main() {
   log2_6b8954();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log2_6b8954();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl
index abdeec9..0696b7c 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_776088(tint_module_vars_struct tint_module_vars) {
+half4 log2_776088() {
   half4 res = half4(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_776088(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_776088(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_776088();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_776088(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_776088();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_776088();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl
index 86266e1..7bea53a 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_8c10b3(tint_module_vars_struct tint_module_vars) {
+half log2_8c10b3() {
   half res = 0.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_8c10b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_8c10b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_8c10b3();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_8c10b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_8c10b3();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_8c10b3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl
index a4202c5..5f94184 100644
--- a/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/902988.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_902988(tint_module_vars_struct tint_module_vars) {
+float4 log2_902988() {
   float4 res = float4(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_902988(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_902988(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_902988();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_902988(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_902988();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_902988();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/a52bbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/a52bbb.wgsl.expected.ir.msl
index da8674e..8be49ae 100644
--- a/test/tint/builtins/gen/literal/log2/a52bbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/a52bbb.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void log2_a52bbb() {
   float4 res = float4(0.0f);
 }
-float4 vertex_main_inner() {
-  log2_a52bbb();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   log2_a52bbb();
 }
 kernel void compute_main() {
   log2_a52bbb();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  log2_a52bbb();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl
index 95ffc14..b101072 100644
--- a/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/adb233.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_adb233(tint_module_vars_struct tint_module_vars) {
+float3 log2_adb233() {
   float3 res = float3(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_adb233(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_adb233(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_adb233();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_adb233(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_adb233();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_adb233();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl
index d3744d9..5bd6995 100644
--- a/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/aea659.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_aea659(tint_module_vars_struct tint_module_vars) {
+float2 log2_aea659() {
   float2 res = float2(0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_aea659(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_aea659(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_aea659();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_aea659(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_aea659();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_aea659();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl
index c5afd86..e3a81fe 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void log2_fb9f0b(tint_module_vars_struct tint_module_vars) {
+half2 log2_fb9f0b() {
   half2 res = half2(0.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  log2_fb9f0b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_fb9f0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_fb9f0b();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  log2_fb9f0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = log2_fb9f0b();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = log2_fb9f0b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/067f3a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/067f3a.wgsl.expected.ir.msl
index 6e4a0a4..c946ecc 100644
--- a/test/tint/builtins/gen/literal/max/067f3a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/067f3a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_067f3a() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  max_067f3a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_067f3a();
 }
 kernel void compute_main() {
   max_067f3a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_067f3a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl
index 68b9786..e56252b 100644
--- a/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/0c0aae.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_0c0aae(tint_module_vars_struct tint_module_vars) {
+uint max_0c0aae() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_0c0aae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_0c0aae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_0c0aae();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_0c0aae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_0c0aae();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_0c0aae();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl
index 6a8a63d..e89fa2b 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_111ac0(tint_module_vars_struct tint_module_vars) {
+half max_111ac0() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_111ac0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_111ac0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_111ac0();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_111ac0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_111ac0();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_111ac0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/19070a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/19070a.wgsl.expected.ir.msl
index 793fecd..7e3f491 100644
--- a/test/tint/builtins/gen/literal/max/19070a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/19070a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_19070a() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  max_19070a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_19070a();
 }
 kernel void compute_main() {
   max_19070a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_19070a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl
index e69052d..e807986 100644
--- a/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/25eafe.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_25eafe(tint_module_vars_struct tint_module_vars) {
+int3 max_25eafe() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_25eafe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_25eafe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_25eafe();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_25eafe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_25eafe();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_25eafe();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl
index 4c8eb8d..497e033 100644
--- a/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/320815.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_320815(tint_module_vars_struct tint_module_vars) {
+uint2 max_320815() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_320815(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_320815(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_320815();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_320815(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_320815();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_320815();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl
index dd7a51a..6235fbe 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_34956e(tint_module_vars_struct tint_module_vars) {
+half2 max_34956e() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_34956e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_34956e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_34956e();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_34956e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_34956e();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_34956e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl
index 8e803d7..9e8b154 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_445169(tint_module_vars_struct tint_module_vars) {
+half3 max_445169() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_445169(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_445169(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_445169();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_445169(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_445169();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_445169();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl
index 7a0aadd..0f513ae 100644
--- a/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/44a39d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_44a39d(tint_module_vars_struct tint_module_vars) {
+float max_44a39d() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_44a39d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_44a39d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_44a39d();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_44a39d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_44a39d();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_44a39d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl
index 2248172..a4c6d1f 100644
--- a/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/453e04.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_453e04(tint_module_vars_struct tint_module_vars) {
+uint4 max_453e04() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_453e04(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_453e04(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_453e04();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_453e04(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_453e04();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_453e04();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl
index fb05031..58a5be4 100644
--- a/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/462050.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_462050(tint_module_vars_struct tint_module_vars) {
+float2 max_462050() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_462050(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_462050(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_462050();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_462050(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_462050();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_462050();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/482d23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/482d23.wgsl.expected.ir.msl
index 5cd9f0d..5878ad0 100644
--- a/test/tint/builtins/gen/literal/max/482d23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/482d23.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_482d23() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  max_482d23();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_482d23();
 }
 kernel void compute_main() {
   max_482d23();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_482d23();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl
index 73b062a..1d42606 100644
--- a/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/4883ac.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_4883ac(tint_module_vars_struct tint_module_vars) {
+float3 max_4883ac() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_4883ac(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_4883ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_4883ac();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_4883ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_4883ac();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_4883ac();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/4bbff2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/4bbff2.wgsl.expected.ir.msl
index 303e715..c608360 100644
--- a/test/tint/builtins/gen/literal/max/4bbff2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/4bbff2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_4bbff2() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  max_4bbff2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_4bbff2();
 }
 kernel void compute_main() {
   max_4bbff2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_4bbff2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl
index 7458729..6e56b64 100644
--- a/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/85e6bc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_85e6bc(tint_module_vars_struct tint_module_vars) {
+int4 max_85e6bc() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_85e6bc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_85e6bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_85e6bc();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_85e6bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_85e6bc();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_85e6bc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/a1b196.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/a1b196.wgsl.expected.ir.msl
index b651bef..638412e 100644
--- a/test/tint/builtins/gen/literal/max/a1b196.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/a1b196.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_a1b196() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  max_a1b196();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_a1b196();
 }
 kernel void compute_main() {
   max_a1b196();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_a1b196();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl
index f562810..baacf64 100644
--- a/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/a93419.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_a93419(tint_module_vars_struct tint_module_vars) {
+float4 max_a93419() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_a93419(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_a93419(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_a93419();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_a93419(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_a93419();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_a93419();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl
index db05f2c..1b918d8 100644
--- a/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/b1b73a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_b1b73a(tint_module_vars_struct tint_module_vars) {
+uint3 max_b1b73a() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_b1b73a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_b1b73a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_b1b73a();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_b1b73a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_b1b73a();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_b1b73a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/c023dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/c023dd.wgsl.expected.ir.msl
index 04942ce..3e1bd53 100644
--- a/test/tint/builtins/gen/literal/max/c023dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/c023dd.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_c023dd() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  max_c023dd();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_c023dd();
 }
 kernel void compute_main() {
   max_c023dd();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_c023dd();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/caa3d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/caa3d7.wgsl.expected.ir.msl
index e7b0bfb..cd9e1aa 100644
--- a/test/tint/builtins/gen/literal/max/caa3d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/caa3d7.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_caa3d7() {
   int res = 1;
 }
-float4 vertex_main_inner() {
-  max_caa3d7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_caa3d7();
 }
 kernel void compute_main() {
   max_caa3d7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_caa3d7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl
index 8f6055d..a1541f3 100644
--- a/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/ce7c30.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_ce7c30(tint_module_vars_struct tint_module_vars) {
+int max_ce7c30() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_ce7c30(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_ce7c30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_ce7c30();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_ce7c30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_ce7c30();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_ce7c30();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/de6b87.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/de6b87.wgsl.expected.ir.msl
index f3dce6a..c8cdfa6 100644
--- a/test/tint/builtins/gen/literal/max/de6b87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/de6b87.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void max_de6b87() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  max_de6b87();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   max_de6b87();
 }
 kernel void compute_main() {
   max_de6b87();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  max_de6b87();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl
index 46c4b9a..f625c2e 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_e14f2b(tint_module_vars_struct tint_module_vars) {
+half4 max_e14f2b() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_e14f2b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_e14f2b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_e14f2b();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_e14f2b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_e14f2b();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_e14f2b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl
index 2efb033..c597f54 100644
--- a/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/max/e8192f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void max_e8192f(tint_module_vars_struct tint_module_vars) {
+int2 max_e8192f() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  max_e8192f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_e8192f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_e8192f();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  max_e8192f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = max_e8192f();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = max_e8192f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl
index 4239b7f..f8a766d 100644
--- a/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/03c7e3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_03c7e3(tint_module_vars_struct tint_module_vars) {
+int2 min_03c7e3() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_03c7e3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_03c7e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_03c7e3();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_03c7e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_03c7e3();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_03c7e3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl
index b96f60b..851d874 100644
--- a/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/0dc614.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_0dc614(tint_module_vars_struct tint_module_vars) {
+uint4 min_0dc614() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_0dc614(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_0dc614(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_0dc614();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_0dc614(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_0dc614();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_0dc614();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/364910.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/364910.wgsl.expected.ir.msl
index 267b0fa..a6d7211 100644
--- a/test/tint/builtins/gen/literal/min/364910.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/364910.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_364910() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  min_364910();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_364910();
 }
 kernel void compute_main() {
   min_364910();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_364910();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/371bd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/371bd6.wgsl.expected.ir.msl
index 80cf152..8535fcd 100644
--- a/test/tint/builtins/gen/literal/min/371bd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/371bd6.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_371bd6() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  min_371bd6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_371bd6();
 }
 kernel void compute_main() {
   min_371bd6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_371bd6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl
index 0f32e79..8c6ddb4 100644
--- a/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/3941e1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_3941e1(tint_module_vars_struct tint_module_vars) {
+int4 min_3941e1() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_3941e1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_3941e1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_3941e1();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_3941e1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_3941e1();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_3941e1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl
index 3e095c3..affc0e7 100644
--- a/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/46c5d3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_46c5d3(tint_module_vars_struct tint_module_vars) {
+uint min_46c5d3() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_46c5d3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_46c5d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_46c5d3();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_46c5d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_46c5d3();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_46c5d3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/527b79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/527b79.wgsl.expected.ir.msl
index f49e694..62764fe 100644
--- a/test/tint/builtins/gen/literal/min/527b79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/527b79.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_527b79() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  min_527b79();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_527b79();
 }
 kernel void compute_main() {
   min_527b79();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_527b79();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/717257.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/717257.wgsl.expected.ir.msl
index 9a26113..32c7d6e 100644
--- a/test/tint/builtins/gen/literal/min/717257.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/717257.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_717257() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  min_717257();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_717257();
 }
 kernel void compute_main() {
   min_717257();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_717257();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/794711.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/794711.wgsl.expected.ir.msl
index 81f9a8e..09cd451 100644
--- a/test/tint/builtins/gen/literal/min/794711.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/794711.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_794711() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  min_794711();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_794711();
 }
 kernel void compute_main() {
   min_794711();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_794711();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl
index 5ba69ae..345f89e 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_7c710a(tint_module_vars_struct tint_module_vars) {
+half4 min_7c710a() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_7c710a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_7c710a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_7c710a();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_7c710a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_7c710a();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_7c710a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl
index a050da8..fe72a59 100644
--- a/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/82b28f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_82b28f(tint_module_vars_struct tint_module_vars) {
+uint2 min_82b28f() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_82b28f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_82b28f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_82b28f();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_82b28f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_82b28f();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_82b28f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/84c9fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/84c9fe.wgsl.expected.ir.msl
index f13d522..2ff3abf 100644
--- a/test/tint/builtins/gen/literal/min/84c9fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/84c9fe.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_84c9fe() {
   int res = 1;
 }
-float4 vertex_main_inner() {
-  min_84c9fe();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_84c9fe();
 }
 kernel void compute_main() {
   min_84c9fe();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_84c9fe();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl
index a3f9bff..21d3910 100644
--- a/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/93cfc4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_93cfc4(tint_module_vars_struct tint_module_vars) {
+float3 min_93cfc4() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_93cfc4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_93cfc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_93cfc4();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_93cfc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_93cfc4();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_93cfc4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/98e797.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/98e797.wgsl.expected.ir.msl
index 165f5cc..a6665de 100644
--- a/test/tint/builtins/gen/literal/min/98e797.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/98e797.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_98e797() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  min_98e797();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_98e797();
 }
 kernel void compute_main() {
   min_98e797();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_98e797();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl
index a9377f8..06c768c 100644
--- a/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/a45171.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_a45171(tint_module_vars_struct tint_module_vars) {
+int3 min_a45171() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_a45171(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_a45171(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_a45171();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_a45171(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_a45171();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_a45171();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl
index 50bf2ab..78ba3e0 100644
--- a/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/aa28ad.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_aa28ad(tint_module_vars_struct tint_module_vars) {
+float2 min_aa28ad() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_aa28ad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_aa28ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_aa28ad();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_aa28ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_aa28ad();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_aa28ad();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl
index ccea67d..57e0ac4 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_ab0acd(tint_module_vars_struct tint_module_vars) {
+half3 min_ab0acd() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_ab0acd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_ab0acd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_ab0acd();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_ab0acd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_ab0acd();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_ab0acd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl
index e0cf353..e920520 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_ac84d6(tint_module_vars_struct tint_module_vars) {
+half min_ac84d6() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_ac84d6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_ac84d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_ac84d6();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_ac84d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_ac84d6();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_ac84d6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl
index 358637a..989b8a3 100644
--- a/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/af326d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_af326d(tint_module_vars_struct tint_module_vars) {
+float min_af326d() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_af326d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_af326d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_af326d();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_af326d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_af326d();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_af326d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/af364e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/af364e.wgsl.expected.ir.msl
index dc99b97..718bff9 100644
--- a/test/tint/builtins/gen/literal/min/af364e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/af364e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void min_af364e() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  min_af364e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   min_af364e();
 }
 kernel void compute_main() {
   min_af364e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  min_af364e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl
index 9d45c4d..852f7ae 100644
--- a/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/c70bb7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_c70bb7(tint_module_vars_struct tint_module_vars) {
+uint3 min_c70bb7() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_c70bb7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_c70bb7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_c70bb7();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_c70bb7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_c70bb7();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_c70bb7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl
index 3a5d1ab..2ed2617 100644
--- a/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/c73147.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_c73147(tint_module_vars_struct tint_module_vars) {
+int min_c73147() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_c73147(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_c73147(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_c73147();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_c73147(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_c73147();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_c73147();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl
index aacb8dc..0f0fdd9 100644
--- a/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/c76fa6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_c76fa6(tint_module_vars_struct tint_module_vars) {
+float4 min_c76fa6() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_c76fa6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_c76fa6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_c76fa6();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_c76fa6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_c76fa6();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_c76fa6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl
index 4316ef6..42296e4 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void min_e780f9(tint_module_vars_struct tint_module_vars) {
+half2 min_e780f9() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  min_e780f9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_e780f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_e780f9();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  min_e780f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = min_e780f9();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = min_e780f9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl
index 60c644f..37ed398 100644
--- a/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/0c8c33.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_0c8c33(tint_module_vars_struct tint_module_vars) {
+float3 mix_0c8c33() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_0c8c33(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_0c8c33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_0c8c33();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_0c8c33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_0c8c33();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_0c8c33();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl
index 184268b..32a20b7 100644
--- a/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/1faeb1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_1faeb1(tint_module_vars_struct tint_module_vars) {
+float4 mix_1faeb1() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_1faeb1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_1faeb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_1faeb1();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_1faeb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_1faeb1();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_1faeb1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/275cac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/275cac.wgsl.expected.ir.msl
index 366a3a0..a274d44 100644
--- a/test/tint/builtins/gen/literal/mix/275cac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/275cac.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_275cac() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  mix_275cac();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_275cac();
 }
 kernel void compute_main() {
   mix_275cac();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_275cac();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl
index 2e2b8a1..22de964 100644
--- a/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/2fadab.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_2fadab(tint_module_vars_struct tint_module_vars) {
+float2 mix_2fadab() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_2fadab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_2fadab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_2fadab();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_2fadab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_2fadab();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_2fadab();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/30de36.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/30de36.wgsl.expected.ir.msl
index 42b61ce..1e716bc 100644
--- a/test/tint/builtins/gen/literal/mix/30de36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/30de36.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_30de36() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  mix_30de36();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_30de36();
 }
 kernel void compute_main() {
   mix_30de36();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_30de36();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl
index 869e888..ab8f242 100644
--- a/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/315264.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_315264(tint_module_vars_struct tint_module_vars) {
+float3 mix_315264() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_315264(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_315264(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_315264();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_315264(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_315264();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_315264();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/343c49.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/343c49.wgsl.expected.ir.msl
index 1421322..c6a6a19 100644
--- a/test/tint/builtins/gen/literal/mix/343c49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/343c49.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_343c49() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  mix_343c49();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_343c49();
 }
 kernel void compute_main() {
   mix_343c49();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_343c49();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl
index 2c75395..8d31b27 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_38cbbb(tint_module_vars_struct tint_module_vars) {
+half mix_38cbbb() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_38cbbb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_38cbbb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_38cbbb();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_38cbbb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_38cbbb();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_38cbbb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/42d11d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/42d11d.wgsl.expected.ir.msl
index 472105d..2695078 100644
--- a/test/tint/builtins/gen/literal/mix/42d11d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/42d11d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_42d11d() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  mix_42d11d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_42d11d();
 }
 kernel void compute_main() {
   mix_42d11d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_42d11d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl
index b2eb1ea..7034d1d 100644
--- a/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/4f0b5e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_4f0b5e(tint_module_vars_struct tint_module_vars) {
+float mix_4f0b5e() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_4f0b5e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_4f0b5e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_4f0b5e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_4f0b5e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_4f0b5e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_4f0b5e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl
index 76d9704..d95e535 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_63f2fd(tint_module_vars_struct tint_module_vars) {
+half3 mix_63f2fd() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_63f2fd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_63f2fd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_63f2fd();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_63f2fd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_63f2fd();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_63f2fd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl
index 66a3402..019ef41 100644
--- a/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/6f8adc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_6f8adc(tint_module_vars_struct tint_module_vars) {
+float2 mix_6f8adc() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_6f8adc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_6f8adc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_6f8adc();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_6f8adc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_6f8adc();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_6f8adc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/98007a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/98007a.wgsl.expected.ir.msl
index 56b4b20..d1bf4eb 100644
--- a/test/tint/builtins/gen/literal/mix/98007a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/98007a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_98007a() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  mix_98007a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_98007a();
 }
 kernel void compute_main() {
   mix_98007a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_98007a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl
index accd28b..b5b7127 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_98ee3e(tint_module_vars_struct tint_module_vars) {
+half2 mix_98ee3e() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_98ee3e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_98ee3e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_98ee3e();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_98ee3e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_98ee3e();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_98ee3e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/9c2681.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/9c2681.wgsl.expected.ir.msl
index f65826a..a7af363 100644
--- a/test/tint/builtins/gen/literal/mix/9c2681.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/9c2681.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_9c2681() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  mix_9c2681();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_9c2681();
 }
 kernel void compute_main() {
   mix_9c2681();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_9c2681();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl
index ab33b29..5fe3345 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_c1aec6(tint_module_vars_struct tint_module_vars) {
+half3 mix_c1aec6() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_c1aec6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_c1aec6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_c1aec6();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_c1aec6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_c1aec6();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_c1aec6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl
index 3e12393..461e68c 100644
--- a/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/c37ede.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_c37ede(tint_module_vars_struct tint_module_vars) {
+float4 mix_c37ede() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_c37ede(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_c37ede(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_c37ede();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_c37ede(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_c37ede();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_c37ede();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl
index d8aaf76..4eb5c81 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_e46a83(tint_module_vars_struct tint_module_vars) {
+half2 mix_e46a83() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_e46a83(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_e46a83(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_e46a83();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_e46a83(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_e46a83();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_e46a83();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl
index 0504018..576c799 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_ee2468(tint_module_vars_struct tint_module_vars) {
+half4 mix_ee2468() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_ee2468(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_ee2468(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_ee2468();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_ee2468(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_ee2468();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_ee2468();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/mix/ef3575.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/ef3575.wgsl.expected.ir.msl
index 258505c..ced87be 100644
--- a/test/tint/builtins/gen/literal/mix/ef3575.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/ef3575.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void mix_ef3575() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  mix_ef3575();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   mix_ef3575();
 }
 kernel void compute_main() {
   mix_ef3575();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  mix_ef3575();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl
index 9fe9569..b8c8852 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void mix_f1a543(tint_module_vars_struct tint_module_vars) {
+half4 mix_f1a543() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  mix_f1a543(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_f1a543(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_f1a543();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  mix_f1a543(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = mix_f1a543();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = mix_f1a543();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.ir.msl
index df29704..6529ed9 100644
--- a/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float2 fract;
   float2 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_2d50da() {
   modf_result_vec2_f32 res = modf_result_vec2_f32{.fract=float2(-0.5f), .whole=float2(-1.0f)};
 }
-float4 vertex_main_inner() {
-  modf_2d50da();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_2d50da();
 }
 kernel void compute_main() {
   modf_2d50da();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_2d50da();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.ir.msl
index 4e7649c..550bfc4 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half3 fract;
   half3 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_45005f() {
   modf_result_vec3_f16 res = modf_result_vec3_f16{.fract=half3(-0.5h), .whole=half3(-1.0h)};
 }
-float4 vertex_main_inner() {
-  modf_45005f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_45005f();
 }
 kernel void compute_main() {
   modf_45005f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_45005f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.ir.msl
index 9396815..837c569 100644
--- a/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float4 fract;
   float4 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_4bfced() {
   modf_result_vec4_f32 res = modf_result_vec4_f32{.fract=float4(-0.5f), .whole=float4(-1.0f)};
 }
-float4 vertex_main_inner() {
-  modf_4bfced();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_4bfced();
 }
 kernel void compute_main() {
   modf_4bfced();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_4bfced();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.ir.msl
index 9d39684..bd6fb58 100644
--- a/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float3 fract;
   float3 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_5ea256() {
   modf_result_vec3_f32 res = modf_result_vec3_f32{.fract=float3(-0.5f), .whole=float3(-1.0f)};
 }
-float4 vertex_main_inner() {
-  modf_5ea256();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_5ea256();
 }
 kernel void compute_main() {
   modf_5ea256();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_5ea256();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/68d8ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/68d8ee.wgsl.expected.ir.msl
index e7f28a2..46573ee 100644
--- a/test/tint/builtins/gen/literal/modf/68d8ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/68d8ee.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float3 fract;
   float3 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_68d8ee() {
   modf_result_vec3_f32 res = modf_result_vec3_f32{.fract=float3(-0.5f), .whole=float3(-1.0f)};
 }
-float4 vertex_main_inner() {
-  modf_68d8ee();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_68d8ee();
 }
 kernel void compute_main() {
   modf_68d8ee();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_68d8ee();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/732aa6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/732aa6.wgsl.expected.ir.msl
index 474c3db..5cc2921 100644
--- a/test/tint/builtins/gen/literal/modf/732aa6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/732aa6.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float2 fract;
   float2 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_732aa6() {
   modf_result_vec2_f32 res = modf_result_vec2_f32{.fract=float2(-0.5f), .whole=float2(-1.0f)};
 }
-float4 vertex_main_inner() {
-  modf_732aa6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_732aa6();
 }
 kernel void compute_main() {
   modf_732aa6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_732aa6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.ir.msl
index 406af89..d407949 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half fract;
   half whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_8dbbbf() {
   modf_result_f16 res = modf_result_f16{.fract=-0.5h, .whole=-1.0h};
 }
-float4 vertex_main_inner() {
-  modf_8dbbbf();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_8dbbbf();
 }
 kernel void compute_main() {
   modf_8dbbbf();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_8dbbbf();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.ir.msl
index b0878d5..304d000 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half4 fract;
   half4 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_995934() {
   modf_result_vec4_f16 res = modf_result_vec4_f16{.fract=half4(-0.5h), .whole=half4(-1.0h)};
 }
-float4 vertex_main_inner() {
-  modf_995934();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_995934();
 }
 kernel void compute_main() {
   modf_995934();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_995934();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.ir.msl
index 92a13b4..412bc03 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   half2 fract;
   half2 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_a545b9() {
   modf_result_vec2_f16 res = modf_result_vec2_f16{.fract=half2(-0.5h), .whole=half2(-1.0h)};
 }
-float4 vertex_main_inner() {
-  modf_a545b9();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_a545b9();
 }
 kernel void compute_main() {
   modf_a545b9();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_a545b9();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.ir.msl
index 99b4637..109bc35 100644
--- a/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float fract;
   float whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_bbf7f7() {
   modf_result_f32 res = modf_result_f32{.fract=-0.5f, .whole=-1.0f};
 }
-float4 vertex_main_inner() {
-  modf_bbf7f7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_bbf7f7();
 }
 kernel void compute_main() {
   modf_bbf7f7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_bbf7f7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/c15f48.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/c15f48.wgsl.expected.ir.msl
index f90466e..145cd9f 100644
--- a/test/tint/builtins/gen/literal/modf/c15f48.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/c15f48.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float fract;
   float whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_c15f48() {
   modf_result_f32 res = modf_result_f32{.fract=-0.5f, .whole=-1.0f};
 }
-float4 vertex_main_inner() {
-  modf_c15f48();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_c15f48();
 }
 kernel void compute_main() {
   modf_c15f48();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_c15f48();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/modf/f3d1f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/modf/f3d1f9.wgsl.expected.ir.msl
index 7c81f2b..031c30b 100644
--- a/test/tint/builtins/gen/literal/modf/f3d1f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/modf/f3d1f9.wgsl.expected.ir.msl
@@ -4,23 +4,28 @@
   float4 fract;
   float4 whole;
 };
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void modf_f3d1f9() {
   modf_result_vec4_f32 res = modf_result_vec4_f32{.fract=float4(-0.5f), .whole=float4(-1.0f)};
 }
-float4 vertex_main_inner() {
-  modf_f3d1f9();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   modf_f3d1f9();
 }
 kernel void compute_main() {
   modf_f3d1f9();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  modf_f3d1f9();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl
index 5e35ff7..262b1de 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void normalize_39d5ec(tint_module_vars_struct tint_module_vars) {
+half3 normalize_39d5ec() {
   half3 res = half3(0.5771484375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  normalize_39d5ec(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_39d5ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_39d5ec();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_39d5ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_39d5ec();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = normalize_39d5ec();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/4eaf61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/4eaf61.wgsl.expected.ir.msl
index f82b147..5668880 100644
--- a/test/tint/builtins/gen/literal/normalize/4eaf61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/4eaf61.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void normalize_4eaf61() {
   float4 res = float4(0.5f);
 }
-float4 vertex_main_inner() {
-  normalize_4eaf61();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   normalize_4eaf61();
 }
 kernel void compute_main() {
   normalize_4eaf61();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  normalize_4eaf61();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/584e47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/584e47.wgsl.expected.ir.msl
index 81d2881..bdc7cfe 100644
--- a/test/tint/builtins/gen/literal/normalize/584e47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/584e47.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void normalize_584e47() {
   float2 res = float2(0.70710676908493041992f);
 }
-float4 vertex_main_inner() {
-  normalize_584e47();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   normalize_584e47();
 }
 kernel void compute_main() {
   normalize_584e47();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  normalize_584e47();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl
index 9b7bddc..459795e 100644
--- a/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/64d8c0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void normalize_64d8c0(tint_module_vars_struct tint_module_vars) {
+float3 normalize_64d8c0() {
   float3 res = float3(0.57735025882720947266f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  normalize_64d8c0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_64d8c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_64d8c0();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_64d8c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_64d8c0();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = normalize_64d8c0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl
index 941f96d..84b62fb 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void normalize_7990f3(tint_module_vars_struct tint_module_vars) {
+half2 normalize_7990f3() {
   half2 res = half2(0.70703125h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  normalize_7990f3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_7990f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_7990f3();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_7990f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_7990f3();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = normalize_7990f3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl
index 8d64e64..a516a35 100644
--- a/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/9a0aab.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void normalize_9a0aab(tint_module_vars_struct tint_module_vars) {
+float4 normalize_9a0aab() {
   float4 res = float4(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  normalize_9a0aab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_9a0aab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_9a0aab();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_9a0aab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_9a0aab();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = normalize_9a0aab();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl
index 8cbc317..3cd2d45 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void normalize_b8cb8d(tint_module_vars_struct tint_module_vars) {
+half4 normalize_b8cb8d() {
   half4 res = half4(0.5h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  normalize_b8cb8d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_b8cb8d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_b8cb8d();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_b8cb8d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_b8cb8d();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = normalize_b8cb8d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/e7def8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/e7def8.wgsl.expected.ir.msl
index de8362e..6872747 100644
--- a/test/tint/builtins/gen/literal/normalize/e7def8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/e7def8.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void normalize_e7def8() {
   float3 res = float3(0.57735025882720947266f);
 }
-float4 vertex_main_inner() {
-  normalize_e7def8();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   normalize_e7def8();
 }
 kernel void compute_main() {
   normalize_e7def8();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  normalize_e7def8();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl
index fab3e33..6986442 100644
--- a/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/normalize/fc2ef1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void normalize_fc2ef1(tint_module_vars_struct tint_module_vars) {
+float2 normalize_fc2ef1() {
   float2 res = float2(0.70710676908493041992f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  normalize_fc2ef1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_fc2ef1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_fc2ef1();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  normalize_fc2ef1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = normalize_fc2ef1();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = normalize_fc2ef1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl
index 1e56c1e..00b0184 100644
--- a/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack2x16float/0e97b3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack2x16float_0e97b3(tint_module_vars_struct tint_module_vars) {
+uint pack2x16float_0e97b3() {
   uint res = 1006648320u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack2x16float_0e97b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack2x16float_0e97b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack2x16float_0e97b3();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack2x16float_0e97b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack2x16float_0e97b3();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack2x16float_0e97b3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl
index bfbdaee..899d500 100644
--- a/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack2x16snorm/6c169b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack2x16snorm_6c169b(tint_module_vars_struct tint_module_vars) {
+uint pack2x16snorm_6c169b() {
   uint res = 2147450879u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack2x16snorm_6c169b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack2x16snorm_6c169b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack2x16snorm_6c169b();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack2x16snorm_6c169b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack2x16snorm_6c169b();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack2x16snorm_6c169b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
index 24ffcb6..23d8123 100644
--- a/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack2x16unorm/0f08e4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack2x16unorm_0f08e4(tint_module_vars_struct tint_module_vars) {
+uint pack2x16unorm_0f08e4() {
   uint res = 4294967295u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack2x16unorm_0f08e4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack2x16unorm_0f08e4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack2x16unorm_0f08e4();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack2x16unorm_0f08e4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack2x16unorm_0f08e4();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack2x16unorm_0f08e4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
index 05f3129..cfd5334 100644
--- a/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4x8snorm/4d22e7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack4x8snorm_4d22e7(tint_module_vars_struct tint_module_vars) {
+uint pack4x8snorm_4d22e7() {
   uint res = 2139062143u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack4x8snorm_4d22e7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4x8snorm_4d22e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4x8snorm_4d22e7();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4x8snorm_4d22e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4x8snorm_4d22e7();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack4x8snorm_4d22e7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl
index 3621272..302aec1 100644
--- a/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4x8unorm/95c456.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack4x8unorm_95c456(tint_module_vars_struct tint_module_vars) {
+uint pack4x8unorm_95c456() {
   uint res = 4294967295u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack4x8unorm_95c456(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4x8unorm_95c456(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4x8unorm_95c456();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4x8unorm_95c456(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4x8unorm_95c456();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack4x8unorm_95c456();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl
index 0ea642f..46419b5 100644
--- a/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4xI8/bfce01.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack4xI8_bfce01(tint_module_vars_struct tint_module_vars) {
+uint pack4xI8_bfce01() {
   uint res = 16843009u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack4xI8_bfce01(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xI8_bfce01(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xI8_bfce01();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xI8_bfce01(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xI8_bfce01();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack4xI8_bfce01();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
index 3e7b3b9..b520b19 100644
--- a/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4xI8Clamp/e42b2a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack4xI8Clamp_e42b2a(tint_module_vars_struct tint_module_vars) {
+uint pack4xI8Clamp_e42b2a() {
   uint res = 16843009u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack4xI8Clamp_e42b2a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xI8Clamp_e42b2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xI8Clamp_e42b2a();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xI8Clamp_e42b2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xI8Clamp_e42b2a();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack4xI8Clamp_e42b2a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl
index f3da1f4..223e09b 100644
--- a/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4xU8/b70b53.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack4xU8_b70b53(tint_module_vars_struct tint_module_vars) {
+uint pack4xU8_b70b53() {
   uint res = 16843009u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack4xU8_b70b53(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xU8_b70b53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xU8_b70b53();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xU8_b70b53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xU8_b70b53();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack4xU8_b70b53();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
index fd1e9e1..e5b601a 100644
--- a/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pack4xU8Clamp/6b8c1b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pack4xU8Clamp_6b8c1b(tint_module_vars_struct tint_module_vars) {
+uint pack4xU8Clamp_6b8c1b() {
   uint res = 16843009u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pack4xU8Clamp_6b8c1b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xU8Clamp_6b8c1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xU8Clamp_6b8c1b();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pack4xU8Clamp_6b8c1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pack4xU8Clamp_6b8c1b();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pack4xU8Clamp_6b8c1b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl
index f3cc5bc..0fb5e19 100644
--- a/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/04a908.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_04a908(tint_module_vars_struct tint_module_vars) {
+float4 pow_04a908() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_04a908(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_04a908(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_04a908();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_04a908(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_04a908();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_04a908();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl
index eff786b..4b74770 100644
--- a/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/46e029.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_46e029(tint_module_vars_struct tint_module_vars) {
+float pow_46e029() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_46e029(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_46e029(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_46e029();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_46e029(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_46e029();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_46e029();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl
index 4883bc9..98edae2 100644
--- a/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/4a46c9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_4a46c9(tint_module_vars_struct tint_module_vars) {
+float3 pow_4a46c9() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_4a46c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_4a46c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_4a46c9();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_4a46c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_4a46c9();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_4a46c9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl
index fca4683..b91696b 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_4f33b2(tint_module_vars_struct tint_module_vars) {
+half4 pow_4f33b2() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_4f33b2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_4f33b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_4f33b2();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_4f33b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_4f33b2();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_4f33b2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/749c42.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/749c42.wgsl.expected.ir.msl
index 12a8cd6..746b2c3 100644
--- a/test/tint/builtins/gen/literal/pow/749c42.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/749c42.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void pow_749c42() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  pow_749c42();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   pow_749c42();
 }
 kernel void compute_main() {
   pow_749c42();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  pow_749c42();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/pow/a8f6b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/a8f6b2.wgsl.expected.ir.msl
index 191eef1..af0a9c3 100644
--- a/test/tint/builtins/gen/literal/pow/a8f6b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/a8f6b2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void pow_a8f6b2() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  pow_a8f6b2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   pow_a8f6b2();
 }
 kernel void compute_main() {
   pow_a8f6b2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  pow_a8f6b2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/pow/bc91ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/bc91ed.wgsl.expected.ir.msl
index a7fde3e..4bbf338 100644
--- a/test/tint/builtins/gen/literal/pow/bc91ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/bc91ed.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void pow_bc91ed() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  pow_bc91ed();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   pow_bc91ed();
 }
 kernel void compute_main() {
   pow_bc91ed();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  pow_bc91ed();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl
index c4e2d0a..f2b0eca 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_ce9ef5(tint_module_vars_struct tint_module_vars) {
+half pow_ce9ef5() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_ce9ef5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_ce9ef5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_ce9ef5();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_ce9ef5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_ce9ef5();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_ce9ef5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/e42f20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/e42f20.wgsl.expected.ir.msl
index 314d790..40cb0ae 100644
--- a/test/tint/builtins/gen/literal/pow/e42f20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/e42f20.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void pow_e42f20() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  pow_e42f20();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   pow_e42f20();
 }
 kernel void compute_main() {
   pow_e42f20();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  pow_e42f20();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl
index 0237784..f300d5c 100644
--- a/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/e60ea5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_e60ea5(tint_module_vars_struct tint_module_vars) {
+float2 pow_e60ea5() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_e60ea5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_e60ea5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_e60ea5();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_e60ea5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_e60ea5();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_e60ea5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl
index 5ea4c8c..c710c30 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_f37b25(tint_module_vars_struct tint_module_vars) {
+half2 pow_f37b25() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_f37b25(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_f37b25(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_f37b25();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_f37b25(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_f37b25();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_f37b25();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl
index c077b54..6e3c99e 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void pow_fa5429(tint_module_vars_struct tint_module_vars) {
+half3 pow_fa5429() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  pow_fa5429(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_fa5429(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_fa5429();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  pow_fa5429(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = pow_fa5429();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = pow_fa5429();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl
index 65ea753..975eccc 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/12e50e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void quantizeToF16_12e50e(tint_module_vars_struct tint_module_vars) {
+float quantizeToF16_12e50e() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  quantizeToF16_12e50e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_12e50e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_12e50e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_12e50e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_12e50e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = quantizeToF16_12e50e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl
index a072e25..299eabc 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/2cddf3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void quantizeToF16_2cddf3(tint_module_vars_struct tint_module_vars) {
+float2 quantizeToF16_2cddf3() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  quantizeToF16_2cddf3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_2cddf3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_2cddf3();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_2cddf3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_2cddf3();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = quantizeToF16_2cddf3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl
index 1ec2a18..b5b4e98 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/cba294.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void quantizeToF16_cba294(tint_module_vars_struct tint_module_vars) {
+float4 quantizeToF16_cba294() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  quantizeToF16_cba294(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_cba294(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_cba294();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_cba294(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_cba294();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = quantizeToF16_cba294();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl
index 652e6c6..0b89d05 100644
--- a/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/quantizeToF16/e8fd14.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void quantizeToF16_e8fd14(tint_module_vars_struct tint_module_vars) {
+float3 quantizeToF16_e8fd14() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  quantizeToF16_e8fd14(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_e8fd14(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_e8fd14();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  quantizeToF16_e8fd14(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = quantizeToF16_e8fd14();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = quantizeToF16_e8fd14();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl
index eb7eb65..babe46a 100644
--- a/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/09b7fc.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_09b7fc(tint_module_vars_struct tint_module_vars) {
+float4 radians_09b7fc() {
   float4 res = float4(0.01745329238474369049f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_09b7fc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_09b7fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_09b7fc();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_09b7fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_09b7fc();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_09b7fc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl
index 1a31e2d..8509f45 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_208fd9(tint_module_vars_struct tint_module_vars) {
+half radians_208fd9() {
   half res = 0.0174407958984375h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_208fd9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_208fd9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_208fd9();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_208fd9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_208fd9();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_208fd9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/379214.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/379214.wgsl.expected.ir.msl
index a4d5a67..484d9ac 100644
--- a/test/tint/builtins/gen/literal/radians/379214.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/379214.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void radians_379214() {
   float3 res = float3(0.01745329238474369049f);
 }
-float4 vertex_main_inner() {
-  radians_379214();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   radians_379214();
 }
 kernel void compute_main() {
   radians_379214();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  radians_379214();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/radians/44a9f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/44a9f8.wgsl.expected.ir.msl
index 690204cb..ebf46fe 100644
--- a/test/tint/builtins/gen/literal/radians/44a9f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/44a9f8.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void radians_44a9f8() {
   float2 res = float2(0.01745329238474369049f);
 }
-float4 vertex_main_inner() {
-  radians_44a9f8();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   radians_44a9f8();
 }
 kernel void compute_main() {
   radians_44a9f8();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  radians_44a9f8();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl
index 18fbc8f..a7cb7fe 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_44f20b(tint_module_vars_struct tint_module_vars) {
+half4 radians_44f20b() {
   half4 res = half4(0.0174407958984375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_44f20b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_44f20b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_44f20b();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_44f20b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_44f20b();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_44f20b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/524a91.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/524a91.wgsl.expected.ir.msl
index f10f2b9..db6305a 100644
--- a/test/tint/builtins/gen/literal/radians/524a91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/524a91.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void radians_524a91() {
   float4 res = float4(0.01745329238474369049f);
 }
-float4 vertex_main_inner() {
-  radians_524a91();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   radians_524a91();
 }
 kernel void compute_main() {
   radians_524a91();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  radians_524a91();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl
index dc1ded7..93334d8 100644
--- a/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/61687a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_61687a(tint_module_vars_struct tint_module_vars) {
+float2 radians_61687a() {
   float2 res = float2(0.01745329238474369049f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_61687a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_61687a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_61687a();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_61687a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_61687a();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_61687a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl
index 7f3ed15..7424a9c 100644
--- a/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/6b0ff2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_6b0ff2(tint_module_vars_struct tint_module_vars) {
+float radians_6b0ff2() {
   float res = 0.01745329238474369049f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_6b0ff2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_6b0ff2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_6b0ff2();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_6b0ff2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_6b0ff2();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_6b0ff2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl
index f350ed0..bc73ccf 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_7ea4c7(tint_module_vars_struct tint_module_vars) {
+half3 radians_7ea4c7() {
   half3 res = half3(0.0174407958984375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_7ea4c7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_7ea4c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_7ea4c7();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_7ea4c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_7ea4c7();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_7ea4c7();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/bff231.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/bff231.wgsl.expected.ir.msl
index 8c19dbf..39c19fb 100644
--- a/test/tint/builtins/gen/literal/radians/bff231.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/bff231.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void radians_bff231() {
   float res = 0.01745329238474369049f;
 }
-float4 vertex_main_inner() {
-  radians_bff231();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   radians_bff231();
 }
 kernel void compute_main() {
   radians_bff231();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  radians_bff231();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl
index b82301c..9254573 100644
--- a/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/f96258.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_f96258(tint_module_vars_struct tint_module_vars) {
+float3 radians_f96258() {
   float3 res = float3(0.01745329238474369049f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_f96258(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_f96258(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_f96258();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_f96258(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_f96258();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_f96258();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl
index 82a7c8b..18aae00 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void radians_fbacf0(tint_module_vars_struct tint_module_vars) {
+half2 radians_fbacf0() {
   half2 res = half2(0.0174407958984375h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  radians_fbacf0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_fbacf0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_fbacf0();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  radians_fbacf0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = radians_fbacf0();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = radians_fbacf0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl
index f2a9db9..915add6 100644
--- a/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/05357e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reflect_05357e(tint_module_vars_struct tint_module_vars) {
+float4 reflect_05357e() {
   float4 res = float4(-7.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reflect_05357e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_05357e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_05357e();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_05357e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_05357e();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reflect_05357e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl
index 545f5b6..49cc077 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reflect_310de5(tint_module_vars_struct tint_module_vars) {
+half4 reflect_310de5() {
   half4 res = half4(-7.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reflect_310de5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_310de5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_310de5();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_310de5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_310de5();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reflect_310de5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl
index 2f1812c..b9e7956 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reflect_61ca21(tint_module_vars_struct tint_module_vars) {
+half3 reflect_61ca21() {
   half3 res = half3(-5.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reflect_61ca21(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_61ca21(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_61ca21();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_61ca21(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_61ca21();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reflect_61ca21();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/a8baf2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/a8baf2.wgsl.expected.ir.msl
index 1b8ea9e..333e33c 100644
--- a/test/tint/builtins/gen/literal/reflect/a8baf2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/a8baf2.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void reflect_a8baf2() {
   float3 res = float3(-5.0f);
 }
-float4 vertex_main_inner() {
-  reflect_a8baf2();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   reflect_a8baf2();
 }
 kernel void compute_main() {
   reflect_a8baf2();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  reflect_a8baf2();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl
index 9dde9da..8866a9b 100644
--- a/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/b61e10.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reflect_b61e10(tint_module_vars_struct tint_module_vars) {
+float2 reflect_b61e10() {
   float2 res = float2(-3.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reflect_b61e10(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_b61e10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_b61e10();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_b61e10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_b61e10();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reflect_b61e10();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl
index 6fbd30d..6867b6d 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reflect_bb15ac(tint_module_vars_struct tint_module_vars) {
+half2 reflect_bb15ac() {
   half2 res = half2(-3.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reflect_bb15ac(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_bb15ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_bb15ac();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_bb15ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_bb15ac();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reflect_bb15ac();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/bba2d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/bba2d0.wgsl.expected.ir.msl
index c2d3f8d..58455ce 100644
--- a/test/tint/builtins/gen/literal/reflect/bba2d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/bba2d0.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void reflect_bba2d0() {
   float2 res = float2(-3.0f);
 }
-float4 vertex_main_inner() {
-  reflect_bba2d0();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   reflect_bba2d0();
 }
 kernel void compute_main() {
   reflect_bba2d0();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  reflect_bba2d0();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/d7e210.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/d7e210.wgsl.expected.ir.msl
index a2037ee..b69112c 100644
--- a/test/tint/builtins/gen/literal/reflect/d7e210.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/d7e210.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void reflect_d7e210() {
   float4 res = float4(-7.0f);
 }
-float4 vertex_main_inner() {
-  reflect_d7e210();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   reflect_d7e210();
 }
 kernel void compute_main() {
   reflect_d7e210();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  reflect_d7e210();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl
index 47211b0..db794c4 100644
--- a/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reflect/f47fdb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reflect_f47fdb(tint_module_vars_struct tint_module_vars) {
+float3 reflect_f47fdb() {
   float3 res = float3(-5.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reflect_f47fdb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_f47fdb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_f47fdb();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reflect_f47fdb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reflect_f47fdb();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reflect_f47fdb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl
index 94dba97..d6d8a13 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void refract_0594ba(tint_module_vars_struct tint_module_vars) {
+half4 refract_0594ba() {
   half4 res = half4(-7.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  refract_0594ba(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_0594ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_0594ba();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_0594ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_0594ba();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = refract_0594ba();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl
index 98e6d22..7c98e31 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void refract_570cb3(tint_module_vars_struct tint_module_vars) {
+half2 refract_570cb3() {
   half2 res = half2(-3.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  refract_570cb3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_570cb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_570cb3();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_570cb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_570cb3();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = refract_570cb3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl
index cb5a663..68875c6 100644
--- a/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/7e02e6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void refract_7e02e6(tint_module_vars_struct tint_module_vars) {
+float4 refract_7e02e6() {
   float4 res = float4(-7.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  refract_7e02e6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_7e02e6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_7e02e6();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_7e02e6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_7e02e6();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = refract_7e02e6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl
index 0b3e782..a88357c 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void refract_8984af(tint_module_vars_struct tint_module_vars) {
+half3 refract_8984af() {
   half3 res = half3(-5.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  refract_8984af(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_8984af(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_8984af();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_8984af(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_8984af();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = refract_8984af();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/8c192a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/8c192a.wgsl.expected.ir.msl
index 8b65f28..b141c5e 100644
--- a/test/tint/builtins/gen/literal/refract/8c192a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/8c192a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void refract_8c192a() {
   float4 res = float4(-7.0f);
 }
-float4 vertex_main_inner() {
-  refract_8c192a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   refract_8c192a();
 }
 kernel void compute_main() {
   refract_8c192a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  refract_8c192a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl
index 04b2150..f422405 100644
--- a/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/cbc1d2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void refract_cbc1d2(tint_module_vars_struct tint_module_vars) {
+float3 refract_cbc1d2() {
   float3 res = float3(-5.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  refract_cbc1d2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_cbc1d2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_cbc1d2();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_cbc1d2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_cbc1d2();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = refract_cbc1d2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl
index 6cce671..1a2e6a3 100644
--- a/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/cd905f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void refract_cd905f(tint_module_vars_struct tint_module_vars) {
+float2 refract_cd905f() {
   float2 res = float2(-3.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  refract_cd905f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_cd905f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_cd905f();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  refract_cd905f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = refract_cd905f();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = refract_cd905f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/refract/cf1629.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/cf1629.wgsl.expected.ir.msl
index 4fe8c21..9ffc89b 100644
--- a/test/tint/builtins/gen/literal/refract/cf1629.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/cf1629.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void refract_cf1629() {
   float2 res = float2(-3.0f);
 }
-float4 vertex_main_inner() {
-  refract_cf1629();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   refract_cf1629();
 }
 kernel void compute_main() {
   refract_cf1629();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  refract_cf1629();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/refract/d7569b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/refract/d7569b.wgsl.expected.ir.msl
index 0561dc7..d255384 100644
--- a/test/tint/builtins/gen/literal/refract/d7569b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/refract/d7569b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void refract_d7569b() {
   float3 res = float3(-5.0f);
 }
-float4 vertex_main_inner() {
-  refract_d7569b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   refract_d7569b();
 }
 kernel void compute_main() {
   refract_d7569b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  refract_d7569b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl
index 48b4c32..451c7c9 100644
--- a/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/222177.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_222177(tint_module_vars_struct tint_module_vars) {
+int2 reverseBits_222177() {
   int2 res = int2((-2147483647 - 1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_222177(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_222177(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_222177();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_222177(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_222177();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_222177();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl
index e493a89..b108103 100644
--- a/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/35fea9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_35fea9(tint_module_vars_struct tint_module_vars) {
+uint4 reverseBits_35fea9() {
   uint4 res = uint4(2147483648u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_35fea9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_35fea9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_35fea9();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_35fea9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_35fea9();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_35fea9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl
index 1ef262a..c25e614 100644
--- a/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/4dbd6f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_4dbd6f(tint_module_vars_struct tint_module_vars) {
+int4 reverseBits_4dbd6f() {
   int4 res = int4((-2147483647 - 1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_4dbd6f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_4dbd6f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_4dbd6f();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_4dbd6f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_4dbd6f();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_4dbd6f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl
index 84e3838..b9adc70 100644
--- a/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/7c4269.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_7c4269(tint_module_vars_struct tint_module_vars) {
+int reverseBits_7c4269() {
   int res = (-2147483647 - 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_7c4269(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_7c4269(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_7c4269();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_7c4269(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_7c4269();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_7c4269();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl
index e5f4a22..c3f7db9 100644
--- a/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/a6ccd4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_a6ccd4(tint_module_vars_struct tint_module_vars) {
+uint3 reverseBits_a6ccd4() {
   uint3 res = uint3(2147483648u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_a6ccd4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_a6ccd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_a6ccd4();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_a6ccd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_a6ccd4();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_a6ccd4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl
index f18b6e1..31c2c38 100644
--- a/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/c21bc1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_c21bc1(tint_module_vars_struct tint_module_vars) {
+int3 reverseBits_c21bc1() {
   int3 res = int3((-2147483647 - 1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_c21bc1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_c21bc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_c21bc1();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_c21bc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_c21bc1();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_c21bc1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl
index e184fa3..46aaf9e 100644
--- a/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/e1f4c1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_e1f4c1(tint_module_vars_struct tint_module_vars) {
+uint2 reverseBits_e1f4c1() {
   uint2 res = uint2(2147483648u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_e1f4c1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_e1f4c1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_e1f4c1();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_e1f4c1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_e1f4c1();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_e1f4c1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl
index 0451f6a..6be5ab8 100644
--- a/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/reverseBits/e31adf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void reverseBits_e31adf(tint_module_vars_struct tint_module_vars) {
+uint reverseBits_e31adf() {
   uint res = 2147483648u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  reverseBits_e31adf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_e31adf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_e31adf();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  reverseBits_e31adf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = reverseBits_e31adf();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = reverseBits_e31adf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl
index bf58166..e825b25 100644
--- a/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/106c0b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_106c0b(tint_module_vars_struct tint_module_vars) {
+float4 round_106c0b() {
   float4 res = float4(4.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_106c0b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_106c0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_106c0b();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_106c0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_106c0b();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_106c0b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/184d5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/184d5a.wgsl.expected.ir.msl
index 99265a3..cdab9aa 100644
--- a/test/tint/builtins/gen/literal/round/184d5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/184d5a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void round_184d5a() {
   float4 res = float4(4.0f);
 }
-float4 vertex_main_inner() {
-  round_184d5a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   round_184d5a();
 }
 kernel void compute_main() {
   round_184d5a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  round_184d5a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl
index d39f0ef..88efaf3 100644
--- a/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/1c7897.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_1c7897(tint_module_vars_struct tint_module_vars) {
+float3 round_1c7897() {
   float3 res = float3(4.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_1c7897(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_1c7897(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_1c7897();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_1c7897(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_1c7897();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_1c7897();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl
index 019c481..2a0a7c9 100644
--- a/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/52c84d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_52c84d(tint_module_vars_struct tint_module_vars) {
+float2 round_52c84d() {
   float2 res = float2(4.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_52c84d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_52c84d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_52c84d();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_52c84d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_52c84d();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_52c84d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/773a8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/773a8f.wgsl.expected.ir.msl
index 4e97376..d571440 100644
--- a/test/tint/builtins/gen/literal/round/773a8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/773a8f.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void round_773a8f() {
   float res = 4.0f;
 }
-float4 vertex_main_inner() {
-  round_773a8f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   round_773a8f();
 }
 kernel void compute_main() {
   round_773a8f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  round_773a8f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/round/8fdca3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/8fdca3.wgsl.expected.ir.msl
index f1eee39..0daa377 100644
--- a/test/tint/builtins/gen/literal/round/8fdca3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/8fdca3.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void round_8fdca3() {
   float2 res = float2(4.0f);
 }
-float4 vertex_main_inner() {
-  round_8fdca3();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   round_8fdca3();
 }
 kernel void compute_main() {
   round_8fdca3();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  round_8fdca3();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl
index f075871..2d21433 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_9078ef(tint_module_vars_struct tint_module_vars) {
+half round_9078ef() {
   half res = 4.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_9078ef(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_9078ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_9078ef();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_9078ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_9078ef();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_9078ef();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl
index 0c48484..97d0892 100644
--- a/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/9edc38.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_9edc38(tint_module_vars_struct tint_module_vars) {
+float round_9edc38() {
   float res = 4.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_9edc38(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_9edc38(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_9edc38();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_9edc38(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_9edc38();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_9edc38();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/a1673d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/a1673d.wgsl.expected.ir.msl
index edbe507..617ec57 100644
--- a/test/tint/builtins/gen/literal/round/a1673d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/a1673d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void round_a1673d() {
   float3 res = float3(4.0f);
 }
-float4 vertex_main_inner() {
-  round_a1673d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   round_a1673d();
 }
 kernel void compute_main() {
   round_a1673d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  round_a1673d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl
index 3bb1015..469fa01 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_d87e84(tint_module_vars_struct tint_module_vars) {
+half2 round_d87e84() {
   half2 res = half2(4.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_d87e84(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_d87e84(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_d87e84();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_d87e84(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_d87e84();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_d87e84();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl
index 065b02f..548a15d 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_e1bba2(tint_module_vars_struct tint_module_vars) {
+half3 round_e1bba2() {
   half3 res = half3(4.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_e1bba2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_e1bba2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_e1bba2();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_e1bba2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_e1bba2();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_e1bba2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl
index 0af70e8..09276cb 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void round_f665b5(tint_module_vars_struct tint_module_vars) {
+half4 round_f665b5() {
   half4 res = half4(4.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  round_f665b5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_f665b5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_f665b5();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  round_f665b5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = round_f665b5();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = round_f665b5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl
index 6e11870..12d8e52 100644
--- a/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/270da5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_270da5(tint_module_vars_struct tint_module_vars) {
+float saturate_270da5() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_270da5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_270da5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_270da5();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_270da5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_270da5();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_270da5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl
index d012368..0e4db38 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_462535(tint_module_vars_struct tint_module_vars) {
+half3 saturate_462535() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_462535(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_462535(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_462535();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_462535(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_462535();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_462535();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.ir.msl
index 83bc878..0a82a3d 100644
--- a/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void saturate_4ed8d7() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  saturate_4ed8d7();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   saturate_4ed8d7();
 }
 kernel void compute_main() {
   saturate_4ed8d7();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  saturate_4ed8d7();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl
index 1f51cef..48fa90e 100644
--- a/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/51567f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_51567f(tint_module_vars_struct tint_module_vars) {
+float2 saturate_51567f() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_51567f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_51567f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_51567f();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_51567f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_51567f();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_51567f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl
index 4bbbb21..d366138 100644
--- a/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/6bcddf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_6bcddf(tint_module_vars_struct tint_module_vars) {
+float3 saturate_6bcddf() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_6bcddf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_6bcddf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_6bcddf();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_6bcddf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_6bcddf();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_6bcddf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.ir.msl
index f86e9ee..6f91fb4 100644
--- a/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void saturate_78b37c() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  saturate_78b37c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   saturate_78b37c();
 }
 kernel void compute_main() {
   saturate_78b37c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  saturate_78b37c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl
index 96a7f14..1b23de4 100644
--- a/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/a5b571.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_a5b571(tint_module_vars_struct tint_module_vars) {
+float4 saturate_a5b571() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_a5b571(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_a5b571(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_a5b571();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_a5b571(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_a5b571();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_a5b571();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl
index 51eb611..2741d07 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_cd2028(tint_module_vars_struct tint_module_vars) {
+half2 saturate_cd2028() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_cd2028(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_cd2028(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_cd2028();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_cd2028(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_cd2028();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_cd2028();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.ir.msl
index 28f21b5..1558e74 100644
--- a/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void saturate_d55822() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  saturate_d55822();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   saturate_d55822();
 }
 kernel void compute_main() {
   saturate_d55822();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  saturate_d55822();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl
index 94453b2..d101559 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_dcde71(tint_module_vars_struct tint_module_vars) {
+half4 saturate_dcde71() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_dcde71(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_dcde71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_dcde71();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_dcde71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_dcde71();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_dcde71();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.ir.msl
index 99d5969..16b8816 100644
--- a/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void saturate_e40fb6() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  saturate_e40fb6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   saturate_e40fb6();
 }
 kernel void compute_main() {
   saturate_e40fb6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  saturate_e40fb6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl
index 46967c9..03b92e2 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void saturate_e8df56(tint_module_vars_struct tint_module_vars) {
+half saturate_e8df56() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  saturate_e8df56(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_e8df56(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_e8df56();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  saturate_e8df56(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = saturate_e8df56();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = saturate_e8df56();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl
index c3651a7..22b706a 100644
--- a/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/00b848.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_00b848(tint_module_vars_struct tint_module_vars) {
+int2 select_00b848() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_00b848(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_00b848(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_00b848();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_00b848(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_00b848();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_00b848();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl
index e661dd6..0df42d5 100644
--- a/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/01e2cd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_01e2cd(tint_module_vars_struct tint_module_vars) {
+int3 select_01e2cd() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_01e2cd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_01e2cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_01e2cd();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_01e2cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_01e2cd();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_01e2cd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl
index e628beb..e2fdb29 100644
--- a/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/087ea4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_087ea4(tint_module_vars_struct tint_module_vars) {
+uint4 select_087ea4() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_087ea4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_087ea4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_087ea4();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_087ea4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_087ea4();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_087ea4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.ir.msl
index e7dbeb8..98dfeae 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_089657() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  select_089657();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_089657();
 }
 kernel void compute_main() {
   select_089657();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_089657();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl
index c879d49..ee862e0 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_10e73b(tint_module_vars_struct tint_module_vars) {
+half select_10e73b() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_10e73b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_10e73b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_10e73b();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_10e73b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_10e73b();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_10e73b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.ir.msl
index 3429e12..22fd810 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_17441a() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  select_17441a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_17441a();
 }
 kernel void compute_main() {
   select_17441a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_17441a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl
index a6e4072..c87e2ed 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_1ada2a(tint_module_vars_struct tint_module_vars) {
+half3 select_1ada2a() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_1ada2a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_1ada2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_1ada2a();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_1ada2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_1ada2a();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_1ada2a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl
index 44ae382..8d49a17 100644
--- a/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/1e960b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_1e960b(tint_module_vars_struct tint_module_vars) {
+uint2 select_1e960b() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_1e960b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_1e960b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_1e960b();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_1e960b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_1e960b();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_1e960b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.ir.msl
index 5c12068..12c3220 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_1f4d93() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  select_1f4d93();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_1f4d93();
 }
 kernel void compute_main() {
   select_1f4d93();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_1f4d93();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl
index 611e683..5c3ac46 100644
--- a/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/266aff.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_266aff(tint_module_vars_struct tint_module_vars) {
+float2 select_266aff() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_266aff(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_266aff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_266aff();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_266aff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_266aff();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_266aff();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl
index a5e479f..47514e8 100644
--- a/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/28a27e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_28a27e(tint_module_vars_struct tint_module_vars) {
+uint3 select_28a27e() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_28a27e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_28a27e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_28a27e();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_28a27e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_28a27e();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_28a27e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.ir.msl
index c3efad0..2957727 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_2c96d4() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  select_2c96d4();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_2c96d4();
 }
 kernel void compute_main() {
   select_2c96d4();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_2c96d4();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.ir.msl
index 105b2d9..3daa531 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_3a14be() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  select_3a14be();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_3a14be();
 }
 kernel void compute_main() {
   select_3a14be();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_3a14be();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl
index 3c60098..3490139 100644
--- a/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/3c25ce.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_3c25ce(tint_module_vars_struct tint_module_vars) {
+int select_3c25ce() {
   bool3 res = bool3(true);
-  (*tint_module_vars.prevent_dce) = select(0, 1, all((res == bool3(false))));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_3c25ce(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all((res == bool3(false))));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_3c25ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_3c25ce();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_3c25ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_3c25ce();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_3c25ce();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl
index bf71672..a9649bd 100644
--- a/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/416e14.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_416e14(tint_module_vars_struct tint_module_vars) {
+float select_416e14() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_416e14(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_416e14(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_416e14();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_416e14(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_416e14();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_416e14();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.ir.msl
index 139dad7..331c4050 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_431dfb() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  select_431dfb();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_431dfb();
 }
 kernel void compute_main() {
   select_431dfb();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_431dfb();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.ir.msl
index 56bb49e..221515c 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_43741e() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  select_43741e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_43741e();
 }
 kernel void compute_main() {
   select_43741e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_43741e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.ir.msl
index 434b17f..d4d12d3 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_494051() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  select_494051();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_494051();
 }
 kernel void compute_main() {
   select_494051();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_494051();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.ir.msl
index 14f5000..bd6045c 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_4c4738() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  select_4c4738();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_4c4738();
 }
 kernel void compute_main() {
   select_4c4738();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_4c4738();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.ir.msl
index 6941087..a49c512 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_4e60da() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  select_4e60da();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_4e60da();
 }
 kernel void compute_main() {
   select_4e60da();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_4e60da();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl
index 3e801f2..08fe6ae 100644
--- a/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/51b047.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_51b047(tint_module_vars_struct tint_module_vars) {
+uint2 select_51b047() {
   uint2 res = uint2(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_51b047(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_51b047(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_51b047();
 }
 kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_51b047(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_51b047();
 }
-vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_51b047();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl
index b904db9..42220d3 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_53d518(tint_module_vars_struct tint_module_vars) {
+half3 select_53d518() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_53d518(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_53d518(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_53d518();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_53d518(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_53d518();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_53d518();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl
index 991736d..e8652ca 100644
--- a/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/713567.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_713567(tint_module_vars_struct tint_module_vars) {
+float4 select_713567() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_713567(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_713567(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_713567();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_713567(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_713567();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_713567();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl
index b17d81f..1870cba 100644
--- a/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/78be5f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_78be5f(tint_module_vars_struct tint_module_vars) {
+float3 select_78be5f() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_78be5f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_78be5f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_78be5f();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_78be5f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_78be5f();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_78be5f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl
index 9e52b3b..164ceaa 100644
--- a/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/80a9a9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_80a9a9(tint_module_vars_struct tint_module_vars) {
+int select_80a9a9() {
   bool3 res = bool3(true);
-  (*tint_module_vars.prevent_dce) = select(0, 1, all((res == bool3(false))));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_80a9a9(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all((res == bool3(false))));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_80a9a9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_80a9a9();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_80a9a9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_80a9a9();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_80a9a9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl
index 92430fd..1d811df 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_830dd9(tint_module_vars_struct tint_module_vars) {
+half4 select_830dd9() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_830dd9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_830dd9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_830dd9();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_830dd9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_830dd9();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_830dd9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl
index 66c303a..e6bd7c5 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_86f9bd(tint_module_vars_struct tint_module_vars) {
+half2 select_86f9bd() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_86f9bd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_86f9bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_86f9bd();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_86f9bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_86f9bd();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_86f9bd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl
index 4f989a8..02298a5 100644
--- a/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/8fa62c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_8fa62c(tint_module_vars_struct tint_module_vars) {
+int3 select_8fa62c() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_8fa62c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_8fa62c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_8fa62c();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_8fa62c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_8fa62c();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_8fa62c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl
index fb44a24..a717765 100644
--- a/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/99f883.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_99f883(tint_module_vars_struct tint_module_vars) {
+uint select_99f883() {
   uint res = 1u;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_99f883(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_99f883(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_99f883();
 }
 kernel void compute_main(device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_99f883(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_99f883();
 }
-vertex vertex_main_outputs vertex_main(device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_99f883();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.ir.msl
index ec63e97..36d6493 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_9b478d() {
   int res = 1;
 }
-float4 vertex_main_inner() {
-  select_9b478d();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_9b478d();
 }
 kernel void compute_main() {
   select_9b478d();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_9b478d();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl
index cce6512..aeef024 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_a081f1(tint_module_vars_struct tint_module_vars) {
+half4 select_a081f1() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_a081f1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_a081f1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_a081f1();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_a081f1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_a081f1();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_a081f1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl
index d45d8b1..2182593 100644
--- a/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/a2860e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_a2860e(tint_module_vars_struct tint_module_vars) {
+int4 select_a2860e() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_a2860e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_a2860e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_a2860e();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_a2860e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_a2860e();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_a2860e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl
index 3c5fb58..b0b9f16 100644
--- a/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ab069f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_ab069f(tint_module_vars_struct tint_module_vars) {
+int4 select_ab069f() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_ab069f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ab069f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ab069f();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ab069f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ab069f();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_ab069f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl
index e2a8ad3..d013da2 100644
--- a/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/b04721.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_b04721(tint_module_vars_struct tint_module_vars) {
+uint3 select_b04721() {
   uint3 res = uint3(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_b04721(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_b04721(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_b04721();
 }
 kernel void compute_main(device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_b04721(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_b04721();
 }
-vertex vertex_main_outputs vertex_main(device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_b04721();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.ir.msl
index 57b5b63..c8d151c 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_b93806() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  select_b93806();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_b93806();
 }
 kernel void compute_main() {
   select_b93806();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_b93806();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl
index a114794..1bdf22b 100644
--- a/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/bb447f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_bb447f(tint_module_vars_struct tint_module_vars) {
+int2 select_bb447f() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_bb447f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_bb447f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_bb447f();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_bb447f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_bb447f();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_bb447f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl
index c39b550..19a1f7d 100644
--- a/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/bb8aae.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_bb8aae(tint_module_vars_struct tint_module_vars) {
+float4 select_bb8aae() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_bb8aae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_bb8aae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_bb8aae();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_bb8aae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_bb8aae();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_bb8aae();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl
index 67737e6..a106f7e 100644
--- a/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/bf3d29.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_bf3d29(tint_module_vars_struct tint_module_vars) {
+float2 select_bf3d29() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_bf3d29(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_bf3d29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_bf3d29();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_bf3d29(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_bf3d29();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_bf3d29();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
index b9d3bf3..012dc95 100644
--- a/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c31f9e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_c31f9e(tint_module_vars_struct tint_module_vars) {
+int select_c31f9e() {
   bool res = true;
-  (*tint_module_vars.prevent_dce) = select(0, 1, all(!(res)));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_c31f9e(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all(!(res)));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_c31f9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_c31f9e();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_c31f9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_c31f9e();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_c31f9e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl
index b6c49ea..8afb110 100644
--- a/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c41bd1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_c41bd1(tint_module_vars_struct tint_module_vars) {
+int select_c41bd1() {
   bool4 res = bool4(true);
-  (*tint_module_vars.prevent_dce) = select(0, 1, all((res == bool4(false))));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_c41bd1(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all((res == bool4(false))));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_c41bd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_c41bd1();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_c41bd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_c41bd1();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_c41bd1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl
index a35887b..8ca31ea 100644
--- a/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/c4a4ef.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_c4a4ef(tint_module_vars_struct tint_module_vars) {
+uint4 select_c4a4ef() {
   uint4 res = uint4(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_c4a4ef(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_c4a4ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_c4a4ef();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_c4a4ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_c4a4ef();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_c4a4ef();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl
index b5d4e6b..47dee47 100644
--- a/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/cb9301.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_cb9301(tint_module_vars_struct tint_module_vars) {
+int select_cb9301() {
   bool2 res = bool2(true);
-  (*tint_module_vars.prevent_dce) = select(0, 1, all((res == bool2(false))));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_cb9301(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all((res == bool2(false))));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_cb9301(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_cb9301();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_cb9301(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_cb9301();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_cb9301();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.ir.msl
index 15f284b..6ba4c2b 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_dfab3b() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  select_dfab3b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_dfab3b();
 }
 kernel void compute_main() {
   select_dfab3b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_dfab3b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.ir.msl
index 2bb3d1d..d2179e9 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void select_e381c3() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  select_e381c3();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   select_e381c3();
 }
 kernel void compute_main() {
   select_e381c3();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  select_e381c3();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl
index 4f15263..9ab9155 100644
--- a/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/e3e028.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_e3e028(tint_module_vars_struct tint_module_vars) {
+int select_e3e028() {
   bool4 res = bool4(true);
-  (*tint_module_vars.prevent_dce) = select(0, 1, all((res == bool4(false))));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_e3e028(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all((res == bool4(false))));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_e3e028(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_e3e028();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_e3e028(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_e3e028();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_e3e028();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl
index 7846dcd..4596a2c 100644
--- a/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ebfea2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_ebfea2(tint_module_vars_struct tint_module_vars) {
+float3 select_ebfea2() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_ebfea2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ebfea2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ebfea2();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ebfea2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ebfea2();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_ebfea2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl
index 2102a0d..2513e05 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_ed7c13(tint_module_vars_struct tint_module_vars) {
+half2 select_ed7c13() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_ed7c13(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ed7c13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ed7c13();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ed7c13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ed7c13();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_ed7c13();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl
index 253fd0f..ebbd2c0 100644
--- a/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/ed8a15.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_ed8a15(tint_module_vars_struct tint_module_vars) {
+int select_ed8a15() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_ed8a15(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ed8a15(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ed8a15();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_ed8a15(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_ed8a15();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_ed8a15();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl
index dd628b7..2c9a6cf 100644
--- a/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/select/fb7e53.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void select_fb7e53(tint_module_vars_struct tint_module_vars) {
+int select_fb7e53() {
   bool2 res = bool2(true);
-  (*tint_module_vars.prevent_dce) = select(0, 1, all((res == bool2(false))));
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  select_fb7e53(tint_module_vars);
-  return float4(0.0f);
+  return select(0, 1, all((res == bool2(false))));
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_fb7e53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_fb7e53();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  select_fb7e53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = select_fb7e53();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = select_fb7e53();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.ir.msl
index 745f674..1f7ef14 100644
--- a/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_0799fd() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  sign_0799fd();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_0799fd();
 }
 kernel void compute_main() {
   sign_0799fd();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_0799fd();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl
index ac6f910..431b847 100644
--- a/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/159665.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_159665(tint_module_vars_struct tint_module_vars) {
+float3 sign_159665() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_159665(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_159665(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_159665();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_159665(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_159665();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_159665();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl
index ca9fcd2..ee07bde 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_160933(tint_module_vars_struct tint_module_vars) {
+half4 sign_160933() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_160933(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_160933(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_160933();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_160933(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_160933();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_160933();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl
index 58904e1..ce0fc68 100644
--- a/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/3233fa.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_3233fa(tint_module_vars_struct tint_module_vars) {
+int sign_3233fa() {
   int res = 1;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_3233fa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_3233fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_3233fa();
 }
 kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_3233fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_3233fa();
 }
-vertex vertex_main_outputs vertex_main(device int* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_3233fa();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/3a39ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/3a39ac.wgsl.expected.ir.msl
index 513a01d..da4d806 100644
--- a/test/tint/builtins/gen/literal/sign/3a39ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/3a39ac.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_3a39ac() {
   int res = 1;
 }
-float4 vertex_main_inner() {
-  sign_3a39ac();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_3a39ac();
 }
 kernel void compute_main() {
   sign_3a39ac();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_3a39ac();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/3bdab6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/3bdab6.wgsl.expected.ir.msl
index 96697a5..72aa314 100644
--- a/test/tint/builtins/gen/literal/sign/3bdab6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/3bdab6.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_3bdab6() {
   int4 res = int4(1);
 }
-float4 vertex_main_inner() {
-  sign_3bdab6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_3bdab6();
 }
 kernel void compute_main() {
   sign_3bdab6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_3bdab6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/55339e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/55339e.wgsl.expected.ir.msl
index 57485f4..b367c12 100644
--- a/test/tint/builtins/gen/literal/sign/55339e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/55339e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_55339e() {
   int3 res = int3(1);
 }
-float4 vertex_main_inner() {
-  sign_55339e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_55339e();
 }
 kernel void compute_main() {
   sign_55339e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_55339e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl
index bf23ba8..6149b7d 100644
--- a/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/58d779.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_58d779(tint_module_vars_struct tint_module_vars) {
+int4 sign_58d779() {
   int4 res = int4(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_58d779(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_58d779(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_58d779();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_58d779(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_58d779();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_58d779();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl
index ff16d5e..94ea91a 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_5d283a(tint_module_vars_struct tint_module_vars) {
+half3 sign_5d283a() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_5d283a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_5d283a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_5d283a();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_5d283a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_5d283a();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_5d283a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl
index 7fc2517..4cd61ff 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_7c85ea(tint_module_vars_struct tint_module_vars) {
+half sign_7c85ea() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_7c85ea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_7c85ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_7c85ea();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_7c85ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_7c85ea();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_7c85ea();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl
index b4e0b2d..5bd81fc 100644
--- a/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/926015.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_926015(tint_module_vars_struct tint_module_vars) {
+int2 sign_926015() {
   int2 res = int2(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_926015(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_926015(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_926015();
 }
 kernel void compute_main(device int2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_926015(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_926015();
 }
-vertex vertex_main_outputs vertex_main(device int2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_926015();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/943b2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/943b2e.wgsl.expected.ir.msl
index 31f203c..e662d82 100644
--- a/test/tint/builtins/gen/literal/sign/943b2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/943b2e.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_943b2e() {
   int2 res = int2(1);
 }
-float4 vertex_main_inner() {
-  sign_943b2e();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_943b2e();
 }
 kernel void compute_main() {
   sign_943b2e();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_943b2e();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl
index d8fa327..cd53b35 100644
--- a/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/9603b1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_9603b1(tint_module_vars_struct tint_module_vars) {
+int3 sign_9603b1() {
   int3 res = int3(1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_9603b1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_9603b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_9603b1();
 }
 kernel void compute_main(device int3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_9603b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_9603b1();
 }
-vertex vertex_main_outputs vertex_main(device int3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_9603b1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.ir.msl
index 0e65bc1..13bab7b 100644
--- a/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_ab6301() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  sign_ab6301();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_ab6301();
 }
 kernel void compute_main() {
   sign_ab6301();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_ab6301();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl
index eb96eb7..d0f07ee 100644
--- a/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/b8f634.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_b8f634(tint_module_vars_struct tint_module_vars) {
+float4 sign_b8f634() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_b8f634(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_b8f634(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_b8f634();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_b8f634(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_b8f634();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_b8f634();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.ir.msl
index f6cbf46..10c3332 100644
--- a/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_c8289c() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  sign_c8289c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_c8289c();
 }
 kernel void compute_main() {
   sign_c8289c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_c8289c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl
index 43c4ee1..d396d06 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_ccdb3c(tint_module_vars_struct tint_module_vars) {
+half2 sign_ccdb3c() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_ccdb3c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_ccdb3c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_ccdb3c();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_ccdb3c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_ccdb3c();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_ccdb3c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl
index f5e9020..ea2f641 100644
--- a/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/d065d8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_d065d8(tint_module_vars_struct tint_module_vars) {
+float2 sign_d065d8() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_d065d8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_d065d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_d065d8();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_d065d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_d065d8();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_d065d8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl
index 98159da..2b26e40 100644
--- a/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/dd790e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sign_dd790e(tint_module_vars_struct tint_module_vars) {
+float sign_dd790e() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sign_dd790e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_dd790e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_dd790e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sign_dd790e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sign_dd790e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sign_dd790e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.ir.msl
index 9806f2e..c50c92d 100644
--- a/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sign_f5da6a() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  sign_f5da6a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sign_f5da6a();
 }
 kernel void compute_main() {
   sign_f5da6a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sign_f5da6a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl
index 34e82c6..3040bfa 100644
--- a/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/01f241.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_01f241(tint_module_vars_struct tint_module_vars) {
+float3 sin_01f241() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_01f241(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_01f241(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_01f241();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_01f241(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_01f241();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_01f241();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/15b2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/15b2c6.wgsl.expected.ir.msl
index 7c138e0..61a66b1 100644
--- a/test/tint/builtins/gen/literal/sin/15b2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/15b2c6.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sin_15b2c6() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  sin_15b2c6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sin_15b2c6();
 }
 kernel void compute_main() {
   sin_15b2c6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sin_15b2c6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl
index ab5c493..858a419 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_2c903b(tint_module_vars_struct tint_module_vars) {
+half3 sin_2c903b() {
   half3 res = half3(0.99951171875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_2c903b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_2c903b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_2c903b();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_2c903b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_2c903b();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_2c903b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl
index 34d88af..36ab45d 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_3cca11(tint_module_vars_struct tint_module_vars) {
+half2 sin_3cca11() {
   half2 res = half2(0.99951171875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_3cca11(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_3cca11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_3cca11();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_3cca11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_3cca11();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_3cca11();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl
index 8034d4c..ee4cd0f 100644
--- a/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/4e3979.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_4e3979(tint_module_vars_struct tint_module_vars) {
+float4 sin_4e3979() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_4e3979(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_4e3979(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_4e3979();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_4e3979(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_4e3979();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_4e3979();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl
index 517a9a1..b59ea23 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_5c0712(tint_module_vars_struct tint_module_vars) {
+half4 sin_5c0712() {
   half4 res = half4(0.99951171875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_5c0712(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_5c0712(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_5c0712();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_5c0712(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_5c0712();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_5c0712();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl
index c3e83b2..b09033a 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_66a59f(tint_module_vars_struct tint_module_vars) {
+half sin_66a59f() {
   half res = 0.99951171875h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_66a59f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_66a59f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_66a59f();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_66a59f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_66a59f();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_66a59f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/67b03c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/67b03c.wgsl.expected.ir.msl
index 46fa9af0..7e8540a 100644
--- a/test/tint/builtins/gen/literal/sin/67b03c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/67b03c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sin_67b03c() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  sin_67b03c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sin_67b03c();
 }
 kernel void compute_main() {
   sin_67b03c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sin_67b03c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sin/68d3ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/68d3ab.wgsl.expected.ir.msl
index 2be3f31..d4574e4 100644
--- a/test/tint/builtins/gen/literal/sin/68d3ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/68d3ab.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sin_68d3ab() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  sin_68d3ab();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sin_68d3ab();
 }
 kernel void compute_main() {
   sin_68d3ab();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sin_68d3ab();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sin/a9ab19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/a9ab19.wgsl.expected.ir.msl
index c5d4e80..de44dd5 100644
--- a/test/tint/builtins/gen/literal/sin/a9ab19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/a9ab19.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sin_a9ab19() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  sin_a9ab19();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sin_a9ab19();
 }
 kernel void compute_main() {
   sin_a9ab19();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sin_a9ab19();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl
index 53917ea..eac7f20 100644
--- a/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/b78c91.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_b78c91(tint_module_vars_struct tint_module_vars) {
+float sin_b78c91() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_b78c91(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_b78c91(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_b78c91();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_b78c91(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_b78c91();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_b78c91();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl
index 7e5a213..0f6fb84 100644
--- a/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sin/fc8bc4.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sin_fc8bc4(tint_module_vars_struct tint_module_vars) {
+float2 sin_fc8bc4() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sin_fc8bc4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_fc8bc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_fc8bc4();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sin_fc8bc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sin_fc8bc4();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sin_fc8bc4();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl
index c48c76c..aa8c098 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_0908c1(tint_module_vars_struct tint_module_vars) {
+half3 sinh_0908c1() {
   half3 res = half3(1.1748046875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_0908c1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_0908c1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_0908c1();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_0908c1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_0908c1();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_0908c1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl
index fe0d644..c62cf8e 100644
--- a/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/445e33.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_445e33(tint_module_vars_struct tint_module_vars) {
+float4 sinh_445e33() {
   float4 res = float4(1.17520117759704589844f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_445e33(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_445e33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_445e33();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_445e33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_445e33();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_445e33();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl
index 765ba25..0f1061c 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_69cce2(tint_module_vars_struct tint_module_vars) {
+half sinh_69cce2() {
   half res = 1.1748046875h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_69cce2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_69cce2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_69cce2();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_69cce2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_69cce2();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_69cce2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/77a2a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/77a2a3.wgsl.expected.ir.msl
index b6a2429..cd3bc48 100644
--- a/test/tint/builtins/gen/literal/sinh/77a2a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/77a2a3.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sinh_77a2a3() {
   float3 res = float3(1.17520117759704589844f);
 }
-float4 vertex_main_inner() {
-  sinh_77a2a3();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sinh_77a2a3();
 }
 kernel void compute_main() {
   sinh_77a2a3();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sinh_77a2a3();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl
index 89dda90a..f35ff82 100644
--- a/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/7bb598.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_7bb598(tint_module_vars_struct tint_module_vars) {
+float sinh_7bb598() {
   float res = 1.17520117759704589844f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_7bb598(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_7bb598(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_7bb598();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_7bb598(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_7bb598();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_7bb598();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl
index a855b93..ba10aa3 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_924f19(tint_module_vars_struct tint_module_vars) {
+half2 sinh_924f19() {
   half2 res = half2(1.1748046875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_924f19(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_924f19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_924f19();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_924f19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_924f19();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_924f19();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/9c1092.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/9c1092.wgsl.expected.ir.msl
index 5e1bdde..605ee00 100644
--- a/test/tint/builtins/gen/literal/sinh/9c1092.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/9c1092.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sinh_9c1092() {
   float2 res = float2(1.17520117759704589844f);
 }
-float4 vertex_main_inner() {
-  sinh_9c1092();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sinh_9c1092();
 }
 kernel void compute_main() {
   sinh_9c1092();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sinh_9c1092();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/a3da7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/a3da7c.wgsl.expected.ir.msl
index de1d8e1..1002a36 100644
--- a/test/tint/builtins/gen/literal/sinh/a3da7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/a3da7c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sinh_a3da7c() {
   float4 res = float4(1.17520117759704589844f);
 }
-float4 vertex_main_inner() {
-  sinh_a3da7c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sinh_a3da7c();
 }
 kernel void compute_main() {
   sinh_a3da7c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sinh_a3da7c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl
index 3c0ef57..081bcb5 100644
--- a/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/b9860e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_b9860e(tint_module_vars_struct tint_module_vars) {
+float2 sinh_b9860e() {
   float2 res = float2(1.17520117759704589844f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_b9860e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_b9860e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_b9860e();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_b9860e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_b9860e();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_b9860e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl
index e3184cd..ef917b6 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_ba7e25(tint_module_vars_struct tint_module_vars) {
+half4 sinh_ba7e25() {
   half4 res = half4(1.1748046875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_ba7e25(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_ba7e25(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_ba7e25();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_ba7e25(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_ba7e25();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_ba7e25();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/c4df74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/c4df74.wgsl.expected.ir.msl
index 5e08125..da00f32 100644
--- a/test/tint/builtins/gen/literal/sinh/c4df74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/c4df74.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sinh_c4df74() {
   float res = 1.17520117759704589844f;
 }
-float4 vertex_main_inner() {
-  sinh_c4df74();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sinh_c4df74();
 }
 kernel void compute_main() {
   sinh_c4df74();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sinh_c4df74();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl
index 456fcdf..ad3cc36 100644
--- a/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sinh/c9a5eb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sinh_c9a5eb(tint_module_vars_struct tint_module_vars) {
+float3 sinh_c9a5eb() {
   float3 res = float3(1.17520117759704589844f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sinh_c9a5eb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_c9a5eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_c9a5eb();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sinh_c9a5eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sinh_c9a5eb();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sinh_c9a5eb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/0c481b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/0c481b.wgsl.expected.ir.msl
index b778168..ba8994b 100644
--- a/test/tint/builtins/gen/literal/smoothstep/0c481b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/0c481b.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void smoothstep_0c481b() {
   float2 res = float2(0.5f);
 }
-float4 vertex_main_inner() {
-  smoothstep_0c481b();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   smoothstep_0c481b();
 }
 kernel void compute_main() {
   smoothstep_0c481b();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  smoothstep_0c481b();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/0c4ffc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/0c4ffc.wgsl.expected.ir.msl
index a443cc7..cd0806b 100644
--- a/test/tint/builtins/gen/literal/smoothstep/0c4ffc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/0c4ffc.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void smoothstep_0c4ffc() {
   float4 res = float4(0.5f);
 }
-float4 vertex_main_inner() {
-  smoothstep_0c4ffc();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   smoothstep_0c4ffc();
 }
 kernel void compute_main() {
   smoothstep_0c4ffc();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  smoothstep_0c4ffc();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl
index c2ebfb2..2247e09 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_12c031(tint_module_vars_struct tint_module_vars) {
+half2 smoothstep_12c031() {
   half2 res = half2(0.5h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_12c031(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_12c031(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_12c031();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_12c031(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_12c031();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_12c031();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl
index 6a62fa7..b92975f 100644
--- a/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/392c19.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_392c19(tint_module_vars_struct tint_module_vars) {
+float2 smoothstep_392c19() {
   float2 res = float2(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_392c19(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_392c19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_392c19();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_392c19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_392c19();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_392c19();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl
index a86e54c..da542bc 100644
--- a/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/40864c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_40864c(tint_module_vars_struct tint_module_vars) {
+float4 smoothstep_40864c() {
   float4 res = float4(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_40864c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_40864c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_40864c();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_40864c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_40864c();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_40864c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl
index f39e1c9..cbadec7 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_586e12(tint_module_vars_struct tint_module_vars) {
+half smoothstep_586e12() {
   half res = 0.5h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_586e12(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_586e12(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_586e12();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_586e12(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_586e12();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_586e12();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/66e4bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/66e4bd.wgsl.expected.ir.msl
index 4831c02..0039fed 100644
--- a/test/tint/builtins/gen/literal/smoothstep/66e4bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/66e4bd.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void smoothstep_66e4bd() {
   float3 res = float3(0.5f);
 }
-float4 vertex_main_inner() {
-  smoothstep_66e4bd();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   smoothstep_66e4bd();
 }
 kernel void compute_main() {
   smoothstep_66e4bd();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  smoothstep_66e4bd();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl
index bb29737..c97405b 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/6c4975.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_6c4975(tint_module_vars_struct tint_module_vars) {
+float smoothstep_6c4975() {
   float res = 0.5f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_6c4975(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_6c4975(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_6c4975();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_6c4975(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_6c4975();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_6c4975();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl
index cf706c0..1c5003b 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_6e7a74(tint_module_vars_struct tint_module_vars) {
+half3 smoothstep_6e7a74() {
   half3 res = half3(0.5h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_6e7a74(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_6e7a74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_6e7a74();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_6e7a74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_6e7a74();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_6e7a74();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/a80fff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/a80fff.wgsl.expected.ir.msl
index c5540e5..5f248ed 100644
--- a/test/tint/builtins/gen/literal/smoothstep/a80fff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/a80fff.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void smoothstep_a80fff() {
   float res = 0.5f;
 }
-float4 vertex_main_inner() {
-  smoothstep_a80fff();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   smoothstep_a80fff();
 }
 kernel void compute_main() {
   smoothstep_a80fff();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  smoothstep_a80fff();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl
index 3f94b70..e514278 100644
--- a/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/aad1db.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_aad1db(tint_module_vars_struct tint_module_vars) {
+float3 smoothstep_aad1db() {
   float3 res = float3(0.5f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_aad1db(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_aad1db(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_aad1db();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_aad1db(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_aad1db();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_aad1db();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl
index 0e5dd7a..3ddea54 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void smoothstep_c43ebd(tint_module_vars_struct tint_module_vars) {
+half4 smoothstep_c43ebd() {
   half4 res = half4(0.5h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  smoothstep_c43ebd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_c43ebd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_c43ebd();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  smoothstep_c43ebd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = smoothstep_c43ebd();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = smoothstep_c43ebd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/072192.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/072192.wgsl.expected.ir.msl
index 6940df8..2d50455 100644
--- a/test/tint/builtins/gen/literal/sqrt/072192.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/072192.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sqrt_072192() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  sqrt_072192();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sqrt_072192();
 }
 kernel void compute_main() {
   sqrt_072192();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sqrt_072192();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl
index c8000ca..22660c4 100644
--- a/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/20c74e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_20c74e(tint_module_vars_struct tint_module_vars) {
+float sqrt_20c74e() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_20c74e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_20c74e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_20c74e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_20c74e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_20c74e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_20c74e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/4ac2c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/4ac2c5.wgsl.expected.ir.msl
index 362c2bc..485f565 100644
--- a/test/tint/builtins/gen/literal/sqrt/4ac2c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/4ac2c5.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sqrt_4ac2c5() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  sqrt_4ac2c5();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sqrt_4ac2c5();
 }
 kernel void compute_main() {
   sqrt_4ac2c5();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sqrt_4ac2c5();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl
index 336f4c3..e993ec5 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_803d1c(tint_module_vars_struct tint_module_vars) {
+half4 sqrt_803d1c() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_803d1c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_803d1c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_803d1c();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_803d1c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_803d1c();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_803d1c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl
index fae3fa2..8a05884 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_895a0c(tint_module_vars_struct tint_module_vars) {
+half3 sqrt_895a0c() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_895a0c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_895a0c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_895a0c();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_895a0c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_895a0c();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_895a0c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl
index 8863e9c..7122882 100644
--- a/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/8c7024.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_8c7024(tint_module_vars_struct tint_module_vars) {
+float2 sqrt_8c7024() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_8c7024(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_8c7024(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_8c7024();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_8c7024(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_8c7024();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_8c7024();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/8da177.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/8da177.wgsl.expected.ir.msl
index 2a96160..567df1f 100644
--- a/test/tint/builtins/gen/literal/sqrt/8da177.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/8da177.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sqrt_8da177() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  sqrt_8da177();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sqrt_8da177();
 }
 kernel void compute_main() {
   sqrt_8da177();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sqrt_8da177();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/9c5cbe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/9c5cbe.wgsl.expected.ir.msl
index 63c3447..a9010a3 100644
--- a/test/tint/builtins/gen/literal/sqrt/9c5cbe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/9c5cbe.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void sqrt_9c5cbe() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  sqrt_9c5cbe();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   sqrt_9c5cbe();
 }
 kernel void compute_main() {
   sqrt_9c5cbe();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  sqrt_9c5cbe();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl
index 2919663..8ded9ba 100644
--- a/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/aa0d7a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_aa0d7a(tint_module_vars_struct tint_module_vars) {
+float4 sqrt_aa0d7a() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_aa0d7a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_aa0d7a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_aa0d7a();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_aa0d7a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_aa0d7a();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_aa0d7a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl
index db68680..0f6cbe3 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_d9ab4d(tint_module_vars_struct tint_module_vars) {
+half2 sqrt_d9ab4d() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_d9ab4d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_d9ab4d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_d9ab4d();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_d9ab4d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_d9ab4d();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_d9ab4d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl
index 245ff5d..1ca2ecd 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_ec33e9(tint_module_vars_struct tint_module_vars) {
+half sqrt_ec33e9() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_ec33e9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_ec33e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_ec33e9();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_ec33e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_ec33e9();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_ec33e9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl
index 9899ca7..3818c05 100644
--- a/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/sqrt/f8c59a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void sqrt_f8c59a(tint_module_vars_struct tint_module_vars) {
+float3 sqrt_f8c59a() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  sqrt_f8c59a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_f8c59a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_f8c59a();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  sqrt_f8c59a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = sqrt_f8c59a();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = sqrt_f8c59a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl
index 907644d..bcca769 100644
--- a/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_07cb06(tint_module_vars_struct tint_module_vars) {
+half2 step_07cb06() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_07cb06(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_07cb06(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_07cb06();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_07cb06(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_07cb06();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_07cb06();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl
index 7c96f4e..99d1d8f 100644
--- a/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/0b073b.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_0b073b(tint_module_vars_struct tint_module_vars) {
+float step_0b073b() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_0b073b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_0b073b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_0b073b();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_0b073b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_0b073b();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_0b073b();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl
index 7987239..caedb98 100644
--- a/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/19accd.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_19accd(tint_module_vars_struct tint_module_vars) {
+float2 step_19accd() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_19accd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_19accd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_19accd();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_19accd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_19accd();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_19accd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl
index f6fe176..f1b0a7a 100644
--- a/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/334303.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_334303(tint_module_vars_struct tint_module_vars) {
+float3 step_334303() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_334303(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_334303(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_334303();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_334303(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_334303();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_334303();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.ir.msl
index 9c685b2..1451599 100644
--- a/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void step_38cd79() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  step_38cd79();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   step_38cd79();
 }
 kernel void compute_main() {
   step_38cd79();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  step_38cd79();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/step/415879.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/415879.wgsl.expected.ir.msl
index 5231eef..baeace1 100644
--- a/test/tint/builtins/gen/literal/step/415879.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/415879.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void step_415879() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  step_415879();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   step_415879();
 }
 kernel void compute_main() {
   step_415879();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  step_415879();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl
index c21f073..2680f4b 100644
--- a/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_630d07(tint_module_vars_struct tint_module_vars) {
+half step_630d07() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_630d07(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_630d07(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_630d07();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_630d07(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_630d07();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_630d07();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.ir.msl
index 424858f..f25345a 100644
--- a/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void step_7c7e5c() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  step_7c7e5c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   step_7c7e5c();
 }
 kernel void compute_main() {
   step_7c7e5c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  step_7c7e5c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl
index 741af07..825c294 100644
--- a/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_baa320(tint_module_vars_struct tint_module_vars) {
+half4 step_baa320() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_baa320(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_baa320(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_baa320();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_baa320(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_baa320();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_baa320();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl
index ea41cf8..cbbd7de 100644
--- a/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_cc6b61(tint_module_vars_struct tint_module_vars) {
+half3 step_cc6b61() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_cc6b61(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_cc6b61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_cc6b61();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_cc6b61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_cc6b61();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_cc6b61();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl
index e0eb627..dd3114a 100644
--- a/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/e2b337.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void step_e2b337(tint_module_vars_struct tint_module_vars) {
+float4 step_e2b337() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  step_e2b337(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_e2b337(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_e2b337();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  step_e2b337(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = step_e2b337();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = step_e2b337();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.ir.msl
index ce70587..57e7ec9 100644
--- a/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void step_f9b70c() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  step_f9b70c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   step_f9b70c();
 }
 kernel void compute_main() {
   step_f9b70c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  step_f9b70c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl
index 8d93beb..a7ae42d 100644
--- a/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/244e2a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_244e2a(tint_module_vars_struct tint_module_vars) {
+float4 tan_244e2a() {
   float4 res = float4(1.55740773677825927734f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_244e2a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_244e2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_244e2a();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_244e2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_244e2a();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_244e2a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl
index 90fee0d..07da261 100644
--- a/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/2f030e.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_2f030e(tint_module_vars_struct tint_module_vars) {
+float tan_2f030e() {
   float res = 1.55740773677825927734f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_2f030e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_2f030e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_2f030e();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_2f030e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_2f030e();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_2f030e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/311400.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/311400.wgsl.expected.ir.msl
index a38deb0..4e4236f 100644
--- a/test/tint/builtins/gen/literal/tan/311400.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/311400.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tan_311400() {
   float res = 1.55740773677825927734f;
 }
-float4 vertex_main_inner() {
-  tan_311400();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tan_311400();
 }
 kernel void compute_main() {
   tan_311400();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tan_311400();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl
index f9758ec..8bb8c8d 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_539e54(tint_module_vars_struct tint_module_vars) {
+half4 tan_539e54() {
   half4 res = half4(1.556640625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_539e54(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_539e54(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_539e54();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_539e54(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_539e54();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_539e54();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/7be368.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/7be368.wgsl.expected.ir.msl
index 6693179..0bfa708 100644
--- a/test/tint/builtins/gen/literal/tan/7be368.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/7be368.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tan_7be368() {
   float2 res = float2(1.55740773677825927734f);
 }
-float4 vertex_main_inner() {
-  tan_7be368();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tan_7be368();
 }
 kernel void compute_main() {
   tan_7be368();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tan_7be368();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl
index f45fccd..e2006a9 100644
--- a/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/7ea104.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_7ea104(tint_module_vars_struct tint_module_vars) {
+float3 tan_7ea104() {
   float3 res = float3(1.55740773677825927734f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_7ea104(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_7ea104(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_7ea104();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_7ea104(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_7ea104();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_7ea104();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl
index c875bb8..68118e4 100644
--- a/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/8ce3e9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_8ce3e9(tint_module_vars_struct tint_module_vars) {
+float2 tan_8ce3e9() {
   float2 res = float2(1.55740773677825927734f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_8ce3e9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_8ce3e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_8ce3e9();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_8ce3e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_8ce3e9();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_8ce3e9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl
index 3cf8ac0..bf1acd4 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_9f7c9c(tint_module_vars_struct tint_module_vars) {
+half2 tan_9f7c9c() {
   half2 res = half2(1.556640625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_9f7c9c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_9f7c9c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_9f7c9c();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_9f7c9c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_9f7c9c();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_9f7c9c();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/a0966f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/a0966f.wgsl.expected.ir.msl
index d38fe59..9e79e2d 100644
--- a/test/tint/builtins/gen/literal/tan/a0966f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/a0966f.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tan_a0966f() {
   float4 res = float4(1.55740773677825927734f);
 }
-float4 vertex_main_inner() {
-  tan_a0966f();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tan_a0966f();
 }
 kernel void compute_main() {
   tan_a0966f();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tan_a0966f();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tan/ae26ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/ae26ae.wgsl.expected.ir.msl
index d6f07ea..d082fee 100644
--- a/test/tint/builtins/gen/literal/tan/ae26ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/ae26ae.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tan_ae26ae() {
   float3 res = float3(1.55740773677825927734f);
 }
-float4 vertex_main_inner() {
-  tan_ae26ae();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tan_ae26ae();
 }
 kernel void compute_main() {
   tan_ae26ae();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tan_ae26ae();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl
index d4ce6f3..3979fb0 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_d4d491(tint_module_vars_struct tint_module_vars) {
+half tan_d4d491() {
   half res = 1.556640625h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_d4d491(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_d4d491(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_d4d491();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_d4d491(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_d4d491();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_d4d491();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl
index d545719..dd56718 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tan_db0456(tint_module_vars_struct tint_module_vars) {
+half3 tan_db0456() {
   half3 res = half3(1.556640625h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tan_db0456(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_db0456(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_db0456();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tan_db0456(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tan_db0456();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tan_db0456();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl
index 182bc08..220e7a7 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_06a4fe(tint_module_vars_struct tint_module_vars) {
+half3 tanh_06a4fe() {
   half3 res = half3(0.76123046875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_06a4fe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_06a4fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_06a4fe();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_06a4fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_06a4fe();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_06a4fe();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/313aa1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/313aa1.wgsl.expected.ir.msl
index 18d2f4a..b73874c 100644
--- a/test/tint/builtins/gen/literal/tanh/313aa1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/313aa1.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tanh_313aa1() {
   float res = 0.76159417629241943359f;
 }
-float4 vertex_main_inner() {
-  tanh_313aa1();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tanh_313aa1();
 }
 kernel void compute_main() {
   tanh_313aa1();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tanh_313aa1();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl
index f013a0e..6fd0265 100644
--- a/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/5663c5.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_5663c5(tint_module_vars_struct tint_module_vars) {
+float4 tanh_5663c5() {
   float4 res = float4(0.76159417629241943359f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_5663c5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_5663c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_5663c5();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_5663c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_5663c5();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_5663c5();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl
index a6c28d4..acd44f6 100644
--- a/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/5724b3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_5724b3(tint_module_vars_struct tint_module_vars) {
+float2 tanh_5724b3() {
   float2 res = float2(0.76159417629241943359f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_5724b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_5724b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_5724b3();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_5724b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_5724b3();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_5724b3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl
index 710861e..837e0c4 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_5b19af(tint_module_vars_struct tint_module_vars) {
+half tanh_5b19af() {
   half res = 0.76123046875h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_5b19af(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_5b19af(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_5b19af();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_5b19af(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_5b19af();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_5b19af();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/6289fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/6289fd.wgsl.expected.ir.msl
index 1777c1c..b03372b 100644
--- a/test/tint/builtins/gen/literal/tanh/6289fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/6289fd.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tanh_6289fd() {
   float3 res = float3(0.76159417629241943359f);
 }
-float4 vertex_main_inner() {
-  tanh_6289fd();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tanh_6289fd();
 }
 kernel void compute_main() {
   tanh_6289fd();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tanh_6289fd();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl
index 8692e3e9..272e26b 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_6d105a(tint_module_vars_struct tint_module_vars) {
+half2 tanh_6d105a() {
   half2 res = half2(0.76123046875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_6d105a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_6d105a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_6d105a();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_6d105a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_6d105a();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_6d105a();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl
index 53c80e7..0ef8c2c 100644
--- a/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/9f9fb9.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_9f9fb9(tint_module_vars_struct tint_module_vars) {
+float3 tanh_9f9fb9() {
   float3 res = float3(0.76159417629241943359f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_9f9fb9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_9f9fb9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_9f9fb9();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_9f9fb9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_9f9fb9();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_9f9fb9();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/ac5d33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/ac5d33.wgsl.expected.ir.msl
index e3df75f..e35e9ab 100644
--- a/test/tint/builtins/gen/literal/tanh/ac5d33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/ac5d33.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tanh_ac5d33() {
   float4 res = float4(0.76159417629241943359f);
 }
-float4 vertex_main_inner() {
-  tanh_ac5d33();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tanh_ac5d33();
 }
 kernel void compute_main() {
   tanh_ac5d33();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tanh_ac5d33();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl
index 6c275c3..47db8da 100644
--- a/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/c15fdb.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_c15fdb(tint_module_vars_struct tint_module_vars) {
+float tanh_c15fdb() {
   float res = 0.76159417629241943359f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_c15fdb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_c15fdb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_c15fdb();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_c15fdb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_c15fdb();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_c15fdb();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/c48aa6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/c48aa6.wgsl.expected.ir.msl
index bdec1c5..b621b58 100644
--- a/test/tint/builtins/gen/literal/tanh/c48aa6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/c48aa6.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void tanh_c48aa6() {
   float2 res = float2(0.76159417629241943359f);
 }
-float4 vertex_main_inner() {
-  tanh_c48aa6();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   tanh_c48aa6();
 }
 kernel void compute_main() {
   tanh_c48aa6();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  tanh_c48aa6();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl
index bebd415..2420417 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tanh_e8efb3(tint_module_vars_struct tint_module_vars) {
+half4 tanh_e8efb3() {
   half4 res = half4(0.76123046875h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  tanh_e8efb3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_e8efb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_e8efb3();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  tanh_e8efb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = tanh_e8efb3();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = tanh_e8efb3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl
index aa16cc8..7dcc972 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/00229f.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_00229f(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_00229f(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_00229f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_00229f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_00229f(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_00229f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_00229f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_00229f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl
index 5612acc4..6f5f343 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/00348c.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_ms<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_00348c(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_00348c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width();
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_00348c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_00348c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_00348c(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_00348c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_00348c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_00348c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl
index 667175c..6ca9278 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/01e21e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_01e21e(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_01e21e(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_01e21e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_01e21e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_01e21e(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_01e21e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_01e21e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_01e21e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl
index 3cd6284..0c3a959 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/01edb1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_01edb1(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_01edb1(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_01edb1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_01edb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_01edb1(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_01edb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_01edb1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_01edb1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl
index b76a274..1090189 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/022903.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_022903(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_022903(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_022903(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_022903(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_022903(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_022903(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_022903(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_022903(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl
index 4cdd1a4..00b7aee 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0276ec.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0276ec(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_0276ec(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0276ec(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0276ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0276ec(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0276ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0276ec(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0276ec(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl
index 0b3c89a..0ac3bf4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/029589.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_029589(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_029589(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_029589(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_029589(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_029589(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_029589(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_029589(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_029589(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl
index b6246e7..26d3b6d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0329b0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0329b0(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_0329b0(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0329b0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0329b0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0329b0(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0329b0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0329b0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0329b0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl
index 8c137ca..7f254be 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/033195.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_033195(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_033195(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_033195(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_033195(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_033195(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_033195(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_033195(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_033195(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl
index 555d9ce..f5a5b93 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/033ea7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_033ea7(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_033ea7(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_033ea7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_033ea7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_033ea7(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_033ea7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_033ea7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_033ea7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl
index 4323cd2..e4aaacb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/038847.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_038847(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_038847(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_038847(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_038847(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_038847(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_038847(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_038847(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_038847(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl
index 65d0c8d..b91ee6e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/03f81e.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_03f81e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_03f81e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_03f81e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_03f81e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_03f81e(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_03f81e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_03f81e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_03f81e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl
index 45eb12e..da26402 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/07f1ba.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_07f1ba(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_07f1ba(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_07f1ba(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_07f1ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_07f1ba(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_07f1ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_07f1ba(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_07f1ba(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl
index c9f3f3f..d07bbd2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/088918.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_088918(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_088918(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_088918(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_088918(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_088918(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_088918(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_088918(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_088918(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl
index c278052..9cd0b25 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0890c6(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_0890c6(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint const v_1 = tint_module_vars.arg_0.get_height(1u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0890c6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0890c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0890c6(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0890c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0890c6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0890c6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl
index cc4524b..e50f3db 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/08e371.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_08e371(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_08e371(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_08e371(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_08e371(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_08e371(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_08e371(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_08e371(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_08e371(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl
index 28af2b2..544ba5d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/09140b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_09140b(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_09140b(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_09140b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_09140b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_09140b(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_09140b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_09140b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_09140b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl
index 1767e3c..54d6709 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0973c9.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0973c9(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_0973c9(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0973c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0973c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0973c9(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0973c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0973c9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0973c9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl
index b6dbf30..94267c8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0baa0d.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0baa0d(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_0baa0d(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0baa0d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0baa0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0baa0d(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0baa0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0baa0d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0baa0d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl
index fc7dfc6..4e29a22 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0c0b0c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0c0b0c(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_0c0b0c(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0c0b0c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0c0b0c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0c0b0c(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0c0b0c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0c0b0c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0c0b0c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl
index 9e33e93..22a5b8e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0d4a7c.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0d4a7c(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_0d4a7c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0d4a7c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0d4a7c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0d4a7c(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0d4a7c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0d4a7c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0d4a7c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl
index c44ec81..4183040 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0de70c.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0de70c(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_0de70c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0de70c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0de70c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0de70c(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0de70c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0de70c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0de70c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl
index da4a72f..63a7628 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   depthcube_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_0ff9a4(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_0ff9a4(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_0ff9a4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0ff9a4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0ff9a4(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_0ff9a4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_0ff9a4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_0ff9a4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl
index 4cda88f5..3fba36c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/135176.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_135176(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_135176(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_135176(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_135176(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_135176(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_135176(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_135176(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_135176(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl
index 7ff0065..f5ff126 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_13f8db(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_13f8db(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_13f8db(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_13f8db(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_13f8db(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_13f8db(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_13f8db(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_13f8db(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl
index c366330..e924506 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1417dd.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_1417dd(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_1417dd(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_1417dd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1417dd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1417dd(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1417dd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1417dd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_1417dd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl
index de354cc..3889f7c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/15aa17.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_15aa17(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_15aa17(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_15aa17(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_15aa17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_15aa17(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_15aa17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_15aa17(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_15aa17(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl
index 97ccb0e..6f5afd6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture2d<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_15b577(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_15b577(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_15b577(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_15b577(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_15b577(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_15b577(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_15b577(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_15b577(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl
index ec3a835..7a52c19 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/18160d.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_18160d(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_18160d(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_18160d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_18160d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_18160d(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_18160d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_18160d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_18160d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl
index b97c564..db68132 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/18f19f.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_18f19f(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_18f19f(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_18f19f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_18f19f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_18f19f(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_18f19f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_18f19f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_18f19f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl
index 44ba07b..3f934ed 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1a2be7.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_1a2be7(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_1a2be7(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_1a2be7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1a2be7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1a2be7(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1a2be7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1a2be7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_1a2be7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl
index df1267d..054e34e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1b720f.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_1b720f(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_1b720f(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_1b720f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1b720f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1b720f(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1b720f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1b720f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_1b720f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl
index 4a8957e..ea8dff1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1bc428.wgsl.expected.ir.msl
@@ -4,30 +4,38 @@
   texture3d<float, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_1bc428(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_1bc428(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint const v_2 = tint_module_vars.arg_0.get_height(v);
   uint3 res = uint3(v_1, v_2, tint_module_vars.arg_0.get_depth(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_1bc428(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1bc428(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1bc428(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1bc428(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1bc428(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_1bc428(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_3 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_3.pos, .VertexOutput_prevent_dce=v_3.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl
index c54e0a6..861948b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture2d<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_1bd78c(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_1bd78c(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_1bd78c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1bd78c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1bd78c(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1bd78c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1bd78c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_1bd78c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl
index f20971d..83f29d8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1e4024.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_1e4024(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_1e4024(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_1e4024(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1e4024(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1e4024(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_1e4024(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_1e4024(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_1e4024(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl
index e3da7b7..00c9711 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/20eaad.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_20eaad(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_20eaad(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_20eaad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_20eaad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_20eaad(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_20eaad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_20eaad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_20eaad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl
index 4718bf2..7904d1f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/20ecef.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_20ecef(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_20ecef(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_20ecef(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_20ecef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_20ecef(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_20ecef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_20ecef(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_20ecef(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl
index 9a4ad98..41d0694 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/212362.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_212362(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_212362(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_212362(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_212362(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_212362(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_212362(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_212362(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_212362(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl
index 5e7443d..5b9211f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/224113.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_224113(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_224113(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_224113(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_224113(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_224113(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_224113(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_224113(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_224113(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl
index 795a58a..384885f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texturecube_array<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_22b5b6(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_22b5b6(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_22b5b6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_22b5b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_22b5b6(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_22b5b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_22b5b6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_22b5b6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl
index b734f66..9680f60 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/24db07.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_24db07(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_24db07(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_24db07(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_24db07(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_24db07(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_24db07(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_24db07(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_24db07(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl
index 03a4f08..792b42d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/25d284.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_25d284(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_25d284(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_25d284(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_25d284(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_25d284(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_25d284(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_25d284(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_25d284(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl
index 0013656..843bf78 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2674d8.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2674d8(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_2674d8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2674d8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2674d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2674d8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2674d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2674d8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2674d8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl
index 0c9bfeb..5964233 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/268ddb.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_268ddb(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_268ddb(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_268ddb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_268ddb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_268ddb(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_268ddb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_268ddb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_268ddb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl
index b13431c..2137a30 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/26d6bf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_26d6bf(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_26d6bf(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_26d6bf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_26d6bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_26d6bf(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_26d6bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_26d6bf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_26d6bf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl
index 8bca1f7..2fe6ebe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/282978.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_282978(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_282978(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_282978(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_282978(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_282978(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_282978(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_282978(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_282978(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl
index 0f54989..1c5a2d0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/283b58.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_283b58(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_283b58(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_283b58(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_283b58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_283b58(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_283b58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_283b58(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_283b58(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl
index 9cfd27a..f8f3e03 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/284c27.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_284c27(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_284c27(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_284c27(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_284c27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_284c27(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_284c27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_284c27(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_284c27(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl
index 568c2f7..72b58d7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2a58b7.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2a58b7(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_2a58b7(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2a58b7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2a58b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2a58b7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2a58b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2a58b7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2a58b7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl
index 6bde090..bbde386 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2bafdf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2bafdf(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_2bafdf(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2bafdf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2bafdf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2bafdf(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2bafdf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2bafdf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2bafdf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl
index 62a2677..5131426 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2dc5c5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2dc5c5(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_2dc5c5(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2dc5c5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2dc5c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2dc5c5(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2dc5c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2dc5c5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2dc5c5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl
index 2dae4c6..090e716 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture2d<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2e443d(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_2e443d(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2e443d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2e443d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2e443d(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2e443d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2e443d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2e443d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl
index e86ecd3..fc8f8af 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture2d_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2fd2a4(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_2fd2a4(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2fd2a4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2fd2a4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2fd2a4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2fd2a4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2fd2a4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2fd2a4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl
index 5502af7..0337974 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2ff32a.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_2ff32a(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_2ff32a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_2ff32a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2ff32a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2ff32a(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_2ff32a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_2ff32a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_2ff32a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl
index 9cbf58d..ab367ea 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/305dd5.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_305dd5(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_305dd5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_305dd5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_305dd5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_305dd5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_305dd5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_305dd5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_305dd5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl
index 658f478..d215669 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/31799c.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_31799c(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_31799c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_31799c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_31799c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_31799c(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_31799c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_31799c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_31799c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl
index d921d61..9a136a6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/31d00d.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_31d00d(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_31d00d(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_31d00d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_31d00d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_31d00d(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_31d00d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_31d00d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_31d00d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl
index 5a68cfb..fe88faf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/325338.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_325338(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_325338(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_325338(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_325338(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_325338(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_325338(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_325338(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_325338(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl
index 904b549..c812942 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube_array<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_346fee(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_346fee(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_346fee(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_346fee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_346fee(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_346fee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_346fee(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_346fee(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl
index 825286f..048336b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/35a7e5.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_35a7e5(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_35a7e5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_35a7e5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_35a7e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_35a7e5(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_35a7e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_35a7e5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_35a7e5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl
index c63c5f8..7a087e1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/35ee69.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_35ee69(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_35ee69(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_35ee69(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_35ee69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_35ee69(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_35ee69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_35ee69(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_35ee69(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl
index 66a8c6c..cda2436 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/36eeb7.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_36eeb7(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_36eeb7(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_36eeb7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_36eeb7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_36eeb7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_36eeb7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_36eeb7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_36eeb7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl
index cefaab6..7f199ed 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/378a65.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_378a65(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_378a65(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_378a65(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_378a65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_378a65(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_378a65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_378a65(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_378a65(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl
index e905b50..faa48f4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_382b16(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_382b16(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_382b16(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_382b16(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_382b16(tint_module_vars);
 }
 kernel void compute_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_382b16(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_382b16(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_382b16(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl
index 2d49d3f..208e16a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3834f8.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3834f8(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3834f8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3834f8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3834f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3834f8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3834f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3834f8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3834f8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl
index a9687ef..48d68a2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/38c9ca.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_38c9ca(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_38c9ca(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_38c9ca(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_38c9ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_38c9ca(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_38c9ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_38c9ca(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_38c9ca(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl
index 682cd74..721d0c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube_array<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3963d0(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3963d0(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3963d0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3963d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3963d0(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3963d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3963d0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3963d0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl
index 789e47e..546b2ad 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/397dab.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_397dab(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_397dab(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_397dab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_397dab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_397dab(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_397dab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_397dab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_397dab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl
index 7e826c5..1394c02 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3a5bb1.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3a5bb1(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_3a5bb1(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3a5bb1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3a5bb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3a5bb1(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3a5bb1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3a5bb1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3a5bb1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl
index 0fcdd6e..2a5af90 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3a7b69.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3a7b69(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3a7b69(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3a7b69(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3a7b69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3a7b69(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3a7b69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3a7b69(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3a7b69(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl
index be19d1b..e6faff2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3af3e7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3af3e7(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_3af3e7(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3af3e7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3af3e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3af3e7(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3af3e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3af3e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3af3e7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl
index b2b2b91..fe6d572 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3b38f6.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depth2d<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3b38f6(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3b38f6(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3b38f6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3b38f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3b38f6(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3b38f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3b38f6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3b38f6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl
index 2928021..7eec483 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3baab5.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3baab5(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3baab5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3baab5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3baab5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3baab5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3baab5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3baab5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3baab5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl
index b46158d..3ccd8ee 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3bf12a.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3bf12a(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3bf12a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3bf12a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3bf12a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3bf12a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3bf12a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3bf12a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3bf12a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl
index b67c01e..4e26b92 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texturecube_array<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3c66f0(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3c66f0(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3c66f0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3c66f0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3c66f0(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3c66f0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3c66f0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3c66f0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl
index 03df67a..2e1f94c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3f3474.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_ms<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3f3474(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3f3474(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width();
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3f3474(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3f3474(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3f3474(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3f3474(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3f3474(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3f3474(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl
index 1268bb6..893a98f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3fc3dc(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3fc3dc(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3fc3dc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3fc3dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3fc3dc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3fc3dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3fc3dc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3fc3dc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl
index 986fa1c..adcdd96 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3ff0a5.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_3ff0a5(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_3ff0a5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_3ff0a5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3ff0a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3ff0a5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_3ff0a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_3ff0a5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_3ff0a5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl
index 7bae585..d69f12a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/40c671.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_40c671(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_40c671(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_40c671(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_40c671(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_40c671(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_40c671(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_40c671(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_40c671(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl
index cbdd6e7..77f1ab4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/40da20.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_40da20(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_40da20(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_40da20(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_40da20(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_40da20(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_40da20(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_40da20(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_40da20(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl
index 7672d7b..050b7c2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/40ecf4.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_40ecf4(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_40ecf4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_40ecf4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_40ecf4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_40ecf4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_40ecf4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_40ecf4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_40ecf4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl
index 3bc56f0..592b78b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/41545f.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_41545f(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_41545f(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_41545f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_41545f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_41545f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_41545f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_41545f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_41545f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl
index e620ac6..210836e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/423519.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_423519(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_423519(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_423519(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_423519(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_423519(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_423519(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_423519(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_423519(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl
index 47c2afc..1baa0aa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/427f92.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_427f92(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_427f92(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_427f92(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_427f92(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_427f92(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_427f92(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_427f92(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_427f92(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl
index 050d7b9..9a055fd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/439651.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_439651(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_439651(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_439651(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_439651(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_439651(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_439651(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_439651(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_439651(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl
index 5c45362..0a161ef 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/445376.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_445376(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_445376(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_445376(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_445376(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_445376(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_445376(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_445376(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_445376(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl
index 213a904..ece7621 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/44b358.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_44b358(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_44b358(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_44b358(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_44b358(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_44b358(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_44b358(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_44b358(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_44b358(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl
index f42ee2f..f6f833a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/452fc1.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_452fc1(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_452fc1(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_452fc1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_452fc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_452fc1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_452fc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_452fc1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_452fc1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl
index b6907bb..1549077 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/46f0fc.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_46f0fc(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_46f0fc(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_46f0fc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_46f0fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_46f0fc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_46f0fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_46f0fc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_46f0fc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl
index d878f96..530740f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4716a4.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4716a4(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_4716a4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4716a4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4716a4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4716a4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4716a4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4716a4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4716a4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl
index 1536dec..2f35773 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/475c10.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_475c10(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_475c10(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_475c10(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_475c10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_475c10(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_475c10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_475c10(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_475c10(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl
index 16a2d7a..9dbff6b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texturecube<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_49a067(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_49a067(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_49a067(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_49a067(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_49a067(tint_module_vars);
 }
 kernel void compute_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_49a067(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_49a067(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_49a067(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl
index e8582f2..b91882c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4acec7.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4acec7(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_4acec7(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4acec7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4acec7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4acec7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4acec7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4acec7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4acec7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl
index 95c0033..d43a577 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4b26ef.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4b26ef(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_4b26ef(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4b26ef(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4b26ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4b26ef(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4b26ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4b26ef(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4b26ef(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl
index 5bffd21..f559973 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4be71b.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4be71b(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_4be71b(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4be71b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4be71b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4be71b(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4be71b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4be71b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4be71b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl
index 7de8086..bef5fb9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4d1f71.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4d1f71(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_4d1f71(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4d1f71(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4d1f71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4d1f71(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4d1f71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4d1f71(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4d1f71(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl
index 27ab970..24e9a25 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4d27b3.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4d27b3(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_4d27b3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4d27b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4d27b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4d27b3(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4d27b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4d27b3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4d27b3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl
index 6f4b2f6..6003c56 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4df14c.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4df14c(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_4df14c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4df14c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4df14c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4df14c(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4df14c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4df14c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4df14c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl
index a1251dc..e539c4e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/4e540a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_4e540a(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_4e540a(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_4e540a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4e540a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4e540a(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_4e540a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_4e540a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_4e540a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl
index fa46126..c212095 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_528c0e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_528c0e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_528c0e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_528c0e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_528c0e(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_528c0e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_528c0e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_528c0e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl
index 74ff9ed..55da51b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/52cf60.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_52cf60(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_52cf60(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_52cf60(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_52cf60(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_52cf60(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_52cf60(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_52cf60(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_52cf60(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl
index e25eed4..741d436 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/534ef8.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_534ef8(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_534ef8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_534ef8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_534ef8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_534ef8(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_534ef8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_534ef8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_534ef8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl
index 1fd7a2f..05fb41c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/542c62.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_542c62(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_542c62(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_542c62(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_542c62(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_542c62(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_542c62(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_542c62(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_542c62(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl
index d9bca4d..d37bc5a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/55fdeb.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_55fdeb(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_55fdeb(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_55fdeb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_55fdeb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_55fdeb(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_55fdeb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_55fdeb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_55fdeb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl
index 2016236..8e92c3b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/5703b3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_5703b3(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_5703b3(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_5703b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_5703b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_5703b3(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_5703b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_5703b3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_5703b3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl
index e7bf9b2..5a1e81e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/578e75.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_578e75(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_578e75(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_578e75(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_578e75(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_578e75(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_578e75(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_578e75(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_578e75(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl
index 1ee9b3e..3cab2f0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/579eee.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_579eee(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_579eee(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_579eee(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_579eee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_579eee(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_579eee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_579eee(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_579eee(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl
index bc33d41..13edb3b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/58a82d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_58a82d(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_58a82d(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_58a82d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_58a82d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_58a82d(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_58a82d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_58a82d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_58a82d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl
index 8af8435..f4954fd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/591981.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_591981(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_591981(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_591981(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_591981(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_591981(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_591981(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_591981(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_591981(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl
index df671d0..ae2a8fb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/599ab5.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_599ab5(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_599ab5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_599ab5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_599ab5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_599ab5(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_599ab5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_599ab5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_599ab5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl
index 96c1bc3..d6eb284 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/5b4b10.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_5b4b10(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_5b4b10(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_5b4b10(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_5b4b10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_5b4b10(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_5b4b10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_5b4b10(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_5b4b10(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl
index 4f7edf7..78aaf20 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/5df042.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_5df042(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_5df042(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_5df042(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_5df042(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_5df042(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_5df042(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_5df042(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_5df042(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl
index db2fcee..9f88765 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/607979.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_607979(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_607979(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_607979(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_607979(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_607979(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_607979(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_607979(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_607979(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl
index de8ac6b..11a57e3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/609d34.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_609d34(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_609d34(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_609d34(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_609d34(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_609d34(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_609d34(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_609d34(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_609d34(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl
index c2c212e..84a8e74 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/617dc8.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_617dc8(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_617dc8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_617dc8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_617dc8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_617dc8(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_617dc8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_617dc8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_617dc8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl
index 1ec04cd..78da32f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/62cb5a.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_62cb5a(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_62cb5a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_62cb5a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_62cb5a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_62cb5a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_62cb5a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_62cb5a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_62cb5a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl
index 7eccb11..4da7eca 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/62e7ae.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_62e7ae(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_62e7ae(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_62e7ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_62e7ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_62e7ae(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_62e7ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_62e7ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_62e7ae(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl
index 9558d72..d31b3cb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_64dc74(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_64dc74(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_64dc74(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_64dc74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_64dc74(tint_module_vars);
 }
 kernel void compute_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_64dc74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_64dc74(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_64dc74(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl
index 03bcfc6..d6e01ab 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/674058.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_674058(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_674058(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_674058(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_674058(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_674058(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_674058(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_674058(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_674058(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl
index 311c8f9..13ae668 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6dae40.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_6dae40(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_6dae40(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_6dae40(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6dae40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6dae40(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6dae40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6dae40(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_6dae40(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl
index ff3521c..0b11539 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6dbef4.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_6dbef4(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_6dbef4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_6dbef4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6dbef4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6dbef4(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6dbef4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6dbef4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_6dbef4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl
index d1a3a69..284ae8c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_6e6c7a(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_6e6c7a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint const v_1 = tint_module_vars.arg_0.get_height(1u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_6e6c7a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6e6c7a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6e6c7a(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6e6c7a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6e6c7a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_6e6c7a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl
index 4e23d00..b72dd41 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6e72c5.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_6e72c5(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_6e72c5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_6e72c5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6e72c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6e72c5(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6e72c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6e72c5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_6e72c5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl
index c89a142..56137f6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   depth2d<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_6f1b5d(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_6f1b5d(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_6f1b5d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6f1b5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6f1b5d(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_6f1b5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_6f1b5d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_6f1b5d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl
index b27ed02..66c0ef2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/709357.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_709357(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_709357(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_709357(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_709357(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_709357(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_709357(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_709357(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_709357(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl
index e8a672c..e2dd8c7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/70dd33.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_70dd33(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_70dd33(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_70dd33(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_70dd33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_70dd33(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_70dd33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_70dd33(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_70dd33(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl
index 0a20df5..15ca257 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/715917.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_715917(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_715917(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_715917(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_715917(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_715917(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_715917(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_715917(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_715917(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl
index 7355e69..6dfc0c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7228de.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7228de(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_7228de(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7228de(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7228de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7228de(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7228de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7228de(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7228de(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl
index df4c8ef..1122db9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7327fa.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7327fa(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_7327fa(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7327fa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7327fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7327fa(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7327fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7327fa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7327fa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl
index beb9880..c8ad96c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/740e7c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_740e7c(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_740e7c(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_740e7c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_740e7c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_740e7c(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_740e7c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_740e7c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_740e7c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl
index ce7b4fd..7a2e9d0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/756031.wgsl.expected.ir.msl
@@ -4,30 +4,38 @@
   texture3d<int, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_756031(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_756031(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint const v_2 = tint_module_vars.arg_0.get_height(v);
   uint3 res = uint3(v_1, v_2, tint_module_vars.arg_0.get_depth(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_756031(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_756031(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_756031(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_756031(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_756031(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_756031(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_3 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_3.pos, .VertexOutput_prevent_dce=v_3.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl
index 051ee3b..2d762f3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/756304.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_756304(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_756304(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_756304(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_756304(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_756304(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_756304(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_756304(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_756304(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl
index 238b095..450838d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/790e57.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_790e57(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_790e57(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_790e57(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_790e57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_790e57(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_790e57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_790e57(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_790e57(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl
index 4beaf3c..bf948d8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/795fbb.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_795fbb(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_795fbb(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_795fbb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_795fbb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_795fbb(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_795fbb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_795fbb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_795fbb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl
index 8eb94d2..eb72025 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/797c30.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_797c30(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_797c30(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_797c30(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_797c30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_797c30(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_797c30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_797c30(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_797c30(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl
index 796b5a3..4d360c0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   depthcube<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_79d168(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_79d168(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_79d168(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_79d168(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_79d168(tint_module_vars);
 }
 kernel void compute_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_79d168(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_79d168(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_79d168(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl
index 953ded3..0e4d37f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7a3890.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7a3890(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_7a3890(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7a3890(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7a3890(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7a3890(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7a3890(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7a3890(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7a3890(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl
index 5dd23dc..8bbbac1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7a9e30.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7a9e30(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_7a9e30(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7a9e30(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7a9e30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7a9e30(tint_module_vars);
 }
 kernel void compute_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7a9e30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7a9e30(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7a9e30(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl
index c4b0111..d8092c11 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7c753b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7c753b(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_7c753b(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7c753b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7c753b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7c753b(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7c753b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7c753b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7c753b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl
index 1d9f450..96a1b71 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7c7c64.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7c7c64(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_7c7c64(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7c7c64(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7c7c64(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7c7c64(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7c7c64(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7c7c64(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7c7c64(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl
index fa8047f..486cd07 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7d8439.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7d8439(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_7d8439(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7d8439(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7d8439(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7d8439(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7d8439(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7d8439(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7d8439(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl
index eaa1db8..d8bea67 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7ea4b5.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7ea4b5(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_7ea4b5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7ea4b5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7ea4b5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7ea4b5(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7ea4b5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7ea4b5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7ea4b5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl
index 46e72c5..ec3c70f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/7edb05.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_7edb05(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_7edb05(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_7edb05(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7edb05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7edb05(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_7edb05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_7edb05(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_7edb05(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl
index 8ac6891..1bd0cdc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8057cb.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8057cb(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_8057cb(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8057cb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8057cb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8057cb(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8057cb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8057cb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8057cb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl
index f57361f..00eacd2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8243a1.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8243a1(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_8243a1(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8243a1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8243a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8243a1(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8243a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8243a1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8243a1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl
index e287cb3..9a5a7b8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/835f90.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_835f90(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_835f90(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_835f90(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_835f90(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_835f90(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_835f90(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_835f90(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_835f90(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl
index c493b1f..ba91d76 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/841ebe.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_841ebe(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_841ebe(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_841ebe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_841ebe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_841ebe(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_841ebe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_841ebe(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_841ebe(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl
index ae7a2e6..29e5464 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/84f363.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_84f363(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_84f363(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_84f363(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_84f363(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_84f363(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_84f363(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_84f363(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_84f363(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl
index 59df37e..a8dd594 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/867ead.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_867ead(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_867ead(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_867ead(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_867ead(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_867ead(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_867ead(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_867ead(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_867ead(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl
index 74bd7bb..0e06d4a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/879b73.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_879b73(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_879b73(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_879b73(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_879b73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_879b73(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_879b73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_879b73(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_879b73(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl
index b072961..09c43c2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/87b42d.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_87b42d(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_87b42d(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_87b42d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_87b42d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_87b42d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_87b42d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_87b42d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_87b42d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl
index ae8873d..f22efc9 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/881dd4.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_881dd4(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_881dd4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_881dd4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_881dd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_881dd4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_881dd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_881dd4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_881dd4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl
index a82ee9f..75dc6cc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8a2b17.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8a2b17(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_8a2b17(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8a2b17(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8a2b17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8a2b17(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8a2b17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8a2b17(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8a2b17(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl
index b6b7ad8..ce8bc9d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8a35f9.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8a35f9(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_8a35f9(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8a35f9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8a35f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8a35f9(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8a35f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8a35f9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8a35f9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl
index bc4c83c..cc123ed 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8af728.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8af728(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_8af728(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8af728(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8af728(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8af728(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8af728(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8af728(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8af728(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl
index f6966b7..1853e4f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8b9906.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8b9906(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_8b9906(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8b9906(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8b9906(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8b9906(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8b9906(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8b9906(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8b9906(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl
index d2d9eb7..3c42f77 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8bd369.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8bd369(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_8bd369(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8bd369(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8bd369(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8bd369(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8bd369(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8bd369(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8bd369(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl
index 5631094..f85006f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8e15f4.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8e15f4(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_8e15f4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8e15f4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8e15f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8e15f4(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8e15f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8e15f4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8e15f4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl
index 3e14e39..32b3dd6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8e5de6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8e5de6(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_8e5de6(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8e5de6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8e5de6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8e5de6(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8e5de6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8e5de6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8e5de6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl
index 7dfecec..e7b2fa4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/8efd47.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_8efd47(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_8efd47(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_8efd47(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8efd47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8efd47(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_8efd47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_8efd47(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_8efd47(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl
index 77ce935..761c58e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/902179.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_902179(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_902179(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_902179(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_902179(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_902179(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_902179(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_902179(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_902179(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl
index 1cdf3c8..a8bdb73 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/904b0f.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_904b0f(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_904b0f(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_904b0f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_904b0f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_904b0f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_904b0f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_904b0f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_904b0f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl
index d93429b..ca69ccd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/90dd74.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_90dd74(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_90dd74(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_90dd74(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_90dd74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_90dd74(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_90dd74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_90dd74(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_90dd74(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl
index 4dd7839..14f9bcc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/91e3b4.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_91e3b4(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_91e3b4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_91e3b4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_91e3b4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_91e3b4(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_91e3b4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_91e3b4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_91e3b4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl
index 35359af..551ae4c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/920006.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_920006(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_920006(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_920006(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_920006(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_920006(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_920006(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_920006(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_920006(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl
index 444a9a1..b92d790 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/92552e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_92552e(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_92552e(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_92552e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_92552e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_92552e(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_92552e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_92552e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_92552e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl
index d7c9da8..a8bd8c8f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9573f3.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9573f3(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9573f3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9573f3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9573f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9573f3(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9573f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9573f3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9573f3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl
index 3717cf7..82229ef 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/965645.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_965645(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_965645(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_965645(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_965645(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_965645(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_965645(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_965645(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_965645(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl
index d4a1059..b240409 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/98b2d3.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube_array<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_98b2d3(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_98b2d3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_98b2d3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_98b2d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_98b2d3(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_98b2d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_98b2d3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_98b2d3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl
index bac2431..33c1763 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depth2d<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_991ea9(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_991ea9(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_991ea9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_991ea9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_991ea9(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_991ea9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_991ea9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_991ea9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl
index 7b80376..865a080 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9944d5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9944d5(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_9944d5(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9944d5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9944d5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9944d5(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9944d5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9944d5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9944d5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl
index f80a0b3..46e2b96 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9b10a0.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9b10a0(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9b10a0(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9b10a0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9b10a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9b10a0(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9b10a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9b10a0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9b10a0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl
index 872c311..0aa34dc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9b223b.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9b223b(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9b223b(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9b223b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9b223b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9b223b(tint_module_vars);
 }
 kernel void compute_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9b223b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9b223b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9b223b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl
index 0ba6b4c..417be68 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9baf27(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9baf27(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9baf27(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9baf27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9baf27(tint_module_vars);
 }
 kernel void compute_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9baf27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9baf27(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9baf27(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl
index 36456fc..1e702c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9c7a00.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9c7a00(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_9c7a00(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9c7a00(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9c7a00(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9c7a00(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9c7a00(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9c7a00(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9c7a00(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl
index 080af2f..750dd84 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texturecube<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9cd4ca(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9cd4ca(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9cd4ca(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9cd4ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9cd4ca(tint_module_vars);
 }
 kernel void compute_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9cd4ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9cd4ca(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9cd4ca(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl
index 8d02903..a89c976 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9cd8ad.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9cd8ad(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_9cd8ad(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9cd8ad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9cd8ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9cd8ad(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9cd8ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9cd8ad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9cd8ad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl
index 2773b27..6a89676 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9d0bac.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9d0bac(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9d0bac(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9d0bac(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9d0bac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9d0bac(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9d0bac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9d0bac(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9d0bac(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl
index 402c0f1..618d089 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9d68b8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9d68b8(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_9d68b8(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9d68b8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9d68b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9d68b8(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9d68b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9d68b8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9d68b8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl
index 7a003a5..576215f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9dc27a.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9dc27a(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9dc27a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9dc27a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9dc27a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9dc27a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9dc27a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9dc27a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9dc27a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl
index cd0a008..d252d2c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9e0794(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9e0794(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9e0794(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9e0794(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9e0794(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9e0794(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9e0794(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9e0794(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl
index bff6553..c3cc37f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9fcc3b.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depthcube_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_9fcc3b(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_9fcc3b(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_9fcc3b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9fcc3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9fcc3b(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_9fcc3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_9fcc3b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_9fcc3b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl
index 2ebcd9d..d3116ac 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a105a5.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a105a5(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_a105a5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a105a5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a105a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a105a5(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a105a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a105a5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a105a5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl
index 9268257..9074c89 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a14386.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a14386(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_a14386(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a14386(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a14386(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a14386(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a14386(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a14386(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a14386(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl
index 8bd00ca..1262dee 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a1598a.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube_array<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a1598a(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_a1598a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a1598a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a1598a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a1598a(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a1598a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a1598a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a1598a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl
index 678f89f..4d291cb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a20ba2.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a20ba2(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_a20ba2(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a20ba2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a20ba2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a20ba2(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a20ba2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a20ba2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a20ba2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl
index a85de12..aba0d35 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a25d9b.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a25d9b(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_a25d9b(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a25d9b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a25d9b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a25d9b(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a25d9b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a25d9b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a25d9b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl
index b353b0d..d9965f1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texturecube<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a2ba5e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_a2ba5e(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a2ba5e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a2ba5e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a2ba5e(tint_module_vars);
 }
 kernel void compute_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a2ba5e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a2ba5e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a2ba5e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl
index 1573c11..d5c0606 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a3ea91.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a3ea91(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_a3ea91(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a3ea91(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a3ea91(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a3ea91(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a3ea91(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a3ea91(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a3ea91(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl
index adc75d0..435b8cc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a48049(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_a48049(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a48049(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a48049(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a48049(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a48049(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a48049(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a48049(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl
index 0b12217..d8016d2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a4cd56.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depth2d_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a4cd56(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_a4cd56(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a4cd56(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a4cd56(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a4cd56(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a4cd56(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a4cd56(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a4cd56(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl
index a084bc7..22209c5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a65776.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a65776(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_a65776(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a65776(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a65776(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a65776(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a65776(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a65776(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a65776(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl
index af8abe4..1effb6b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a7ae4c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_a7ae4c(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_a7ae4c(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_a7ae4c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a7ae4c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a7ae4c(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_a7ae4c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_a7ae4c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_a7ae4c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl
index 38d6210..e012950 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/aa4353.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_aa4353(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_aa4353(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_aa4353(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_aa4353(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_aa4353(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_aa4353(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_aa4353(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_aa4353(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl
index 4912240..eeb4ad0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/aac604.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_aac604(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_aac604(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_aac604(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_aac604(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_aac604(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_aac604(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_aac604(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_aac604(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl
index ab1a5fa..cb26ebc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ad7d3b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ad7d3b(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_ad7d3b(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ad7d3b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ad7d3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ad7d3b(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ad7d3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ad7d3b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ad7d3b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl
index adfc5e1..9db6382 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ae4595.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ae4595(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_ae4595(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ae4595(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ae4595(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ae4595(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ae4595(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ae4595(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ae4595(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl
index 0e58aba..aa77233 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ae75a7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ae75a7(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_ae75a7(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ae75a7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ae75a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ae75a7(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ae75a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ae75a7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ae75a7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl
index 2cdf5b7..4afc6877 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/af46ab.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_af46ab(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_af46ab(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_af46ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_af46ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_af46ab(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_af46ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_af46ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_af46ab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl
index 408d03a..9d3cc10 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b16352.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b16352(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_b16352(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b16352(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b16352(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b16352(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b16352(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b16352(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b16352(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl
index 2fb5086..9bfff42 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b284b8.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b284b8(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_b284b8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b284b8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b284b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b284b8(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b284b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b284b8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b284b8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl
index dad4548..49f45e7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texturecube_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b3ab5e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_b3ab5e(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b3ab5e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b3ab5e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b3ab5e(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b3ab5e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b3ab5e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b3ab5e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl
index 4775cc8..da63a74 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b46d97.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b46d97(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_b46d97(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b46d97(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b46d97(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b46d97(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b46d97(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b46d97(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b46d97(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl
index 0df82aa..8a54105 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b51345.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b51345(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_b51345(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b51345(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b51345(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b51345(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b51345(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b51345(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b51345(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl
index 39bf1a0..eda6790 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b56112.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b56112(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_b56112(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b56112(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b56112(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b56112(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b56112(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b56112(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b56112(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl
index df9d273..d306b42 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b5ba03.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b5ba03(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_b5ba03(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b5ba03(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b5ba03(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b5ba03(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b5ba03(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b5ba03(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b5ba03(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl
index 08172b2..25de5b7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b5d68e.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b5d68e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_b5d68e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b5d68e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b5d68e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b5d68e(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b5d68e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b5d68e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b5d68e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl
index 21625c4..094aee2 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b6bbf4.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b6bbf4(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_b6bbf4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b6bbf4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b6bbf4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b6bbf4(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b6bbf4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b6bbf4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b6bbf4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl
index 4ffab41..590f970 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b8287f.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b8287f(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_b8287f(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b8287f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b8287f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b8287f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b8287f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b8287f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b8287f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl
index 51b2cbb..0bcbf24 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b9e7ef.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_b9e7ef(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_b9e7ef(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_b9e7ef(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b9e7ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b9e7ef(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_b9e7ef(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_b9e7ef(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_b9e7ef(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl
index 55c9f1f..eef9176 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bb95d9.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_bb95d9(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_bb95d9(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_bb95d9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bb95d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bb95d9(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bb95d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bb95d9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_bb95d9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl
index bed3ee6..2785ec5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bbe285.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_bbe285(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_bbe285(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_bbe285(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bbe285(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bbe285(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bbe285(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bbe285(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_bbe285(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl
index 0f523c1..780498a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bc96f6.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_bc96f6(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_bc96f6(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_bc96f6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bc96f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bc96f6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bc96f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bc96f6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_bc96f6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl
index 37f4105..de832bf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depthcube_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_bd94c8(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_bd94c8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_bd94c8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bd94c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bd94c8(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bd94c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bd94c8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_bd94c8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl
index 8ff1b9c..cdfeb7c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bec716.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_bec716(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_bec716(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_bec716(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bec716(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bec716(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bec716(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bec716(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_bec716(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl
index 47cb065..caa2def 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bf9170.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_bf9170(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_bf9170(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_bf9170(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bf9170(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bf9170(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_bf9170(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_bf9170(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_bf9170(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl
index 828b16c..083022c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c1189e.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c1189e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c1189e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c1189e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c1189e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c1189e(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c1189e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c1189e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c1189e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl
index 59ca77b..f31fa53 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c1dbf6.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c1dbf6(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c1dbf6(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c1dbf6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c1dbf6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c1dbf6(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c1dbf6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c1dbf6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c1dbf6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl
index 2995f45..f5e0883 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c27466.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c27466(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_c27466(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c27466(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c27466(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c27466(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c27466(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c27466(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c27466(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl
index 1ebf268..a8153b3 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c2cdd3.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depth2d_ms<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c2cdd3(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c2cdd3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width();
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c2cdd3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c2cdd3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c2cdd3(tint_module_vars);
 }
 kernel void compute_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c2cdd3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c2cdd3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c2cdd3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl
index d6e7c10..3a290b1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c44fc1.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c44fc1(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c44fc1(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c44fc1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c44fc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c44fc1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c44fc1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c44fc1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c44fc1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl
index c4466ef..ec347b1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c5a36e.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depthcube<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c5a36e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c5a36e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c5a36e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c5a36e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c5a36e(tint_module_vars);
 }
 kernel void compute_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c5a36e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c5a36e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c5a36e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl
index 5d32010..04e9b4d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c6b44c.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c6b44c(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c6b44c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c6b44c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c6b44c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c6b44c(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c6b44c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c6b44c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c6b44c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl
index 8b34ccc..532dc0c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c6b985.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c6b985(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_c6b985(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c6b985(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c6b985(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c6b985(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c6b985(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c6b985(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c6b985(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl
index f0e0761..aa6f05b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c7ea63.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c7ea63(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_c7ea63(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c7ea63(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c7ea63(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c7ea63(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c7ea63(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c7ea63(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c7ea63(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl
index 54565cd..50ee5dc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c82420.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c82420(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_c82420(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c82420(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c82420(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c82420(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c82420(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c82420(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c82420(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl
index 48d16ef..4fac3c6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_c871f3(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_c871f3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint const v_1 = tint_module_vars.arg_0.get_height(1u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_c871f3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c871f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c871f3(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_c871f3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_c871f3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_c871f3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl
index 2626e89..12ae51a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ca10cc.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ca10cc(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_ca10cc(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ca10cc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ca10cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ca10cc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ca10cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ca10cc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ca10cc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl
index 26c08c0..26ad314 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cad3b7.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_cad3b7(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_cad3b7(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_cad3b7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cad3b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cad3b7(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cad3b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cad3b7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_cad3b7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl
index 802d668..3880d46 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cc947b.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_cc947b(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_cc947b(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_cc947b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cc947b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cc947b(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cc947b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cc947b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_cc947b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl
index 194e932..d092aac 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cd3033.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_cd3033(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_cd3033(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_cd3033(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cd3033(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cd3033(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cd3033(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cd3033(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_cd3033(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl
index 5451a28..2c43823 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cdc6c9.wgsl.expected.ir.msl
@@ -32,27 +32,35 @@
   const constant tint_ExternalTextureParams* arg_0_params;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_cdc6c9(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_cdc6c9(tint_module_vars_struct tint_module_vars) {
   uint2 res = ((*tint_module_vars.arg_0_params).visibleSize + uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_cdc6c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  textureDimensions_cdc6c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cdc6c9(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  textureDimensions_cdc6c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cdc6c9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_cdc6c9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl
index 4cd6281..e62fa07 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cedabd.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_cedabd(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_cedabd(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_cedabd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cedabd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cedabd(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cedabd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cedabd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_cedabd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl
index d137465..fa5070d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_cf2b50(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_cf2b50(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_cf2b50(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cf2b50(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cf2b50(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_cf2b50(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_cf2b50(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_cf2b50(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl
index 2455f03..fa6d2dd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d0778e.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d0778e(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_d0778e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d0778e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d0778e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d0778e(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d0778e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d0778e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d0778e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl
index 4cddf39..411c5be 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d08a94.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d08a94(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_d08a94(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d08a94(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d08a94(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d08a94(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d08a94(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d08a94(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d08a94(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl
index 0bbeb72..8e63f66 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d1b882.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d1b882(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d1b882(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d1b882(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d1b882(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d1b882(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d1b882(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d1b882(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d1b882(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl
index 6da583d..5d3c5cd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depthcube<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d3accd(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d3accd(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d3accd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d3accd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d3accd(tint_module_vars);
 }
 kernel void compute_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d3accd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d3accd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d3accd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl
index d789c25..25ec9ba 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d44ac3.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d44ac3(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d44ac3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d44ac3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d44ac3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d44ac3(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d44ac3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d44ac3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d44ac3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl
index d2e5cb99..ad2563c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d44dd1.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d44dd1(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d44dd1(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d44dd1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d44dd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d44dd1(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d44dd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d44dd1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d44dd1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl
index ca088ba..bbd99d4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d63c28.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d63c28(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d63c28(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d63c28(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d63c28(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d63c28(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d63c28(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d63c28(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d63c28(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl
index 7445ee2..c0aecd5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d6f3cf.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d6f3cf(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d6f3cf(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d6f3cf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d6f3cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d6f3cf(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d6f3cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d6f3cf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d6f3cf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl
index e7e50d4..b74e4da 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d8ba68.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d8ba68(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_d8ba68(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d8ba68(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d8ba68(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d8ba68(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d8ba68(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d8ba68(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d8ba68(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl
index e1fbf8e..2e10bdf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d8f887.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<uint, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_d8f887(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_d8f887(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_d8f887(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d8f887(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d8f887(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_d8f887(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_d8f887(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_d8f887(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl
index 2e7fde3..ba04dcd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/da30d2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_da30d2(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_da30d2(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_da30d2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_da30d2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_da30d2(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_da30d2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_da30d2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_da30d2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl
index 03b9615..87ad3c6 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/daf0fe.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_daf0fe(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_daf0fe(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_daf0fe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_daf0fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_daf0fe(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_daf0fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_daf0fe(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_daf0fe(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl
index d259cc8..7abf1f7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/db7131.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_db7131(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_db7131(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_db7131(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_db7131(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_db7131(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_db7131(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_db7131(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_db7131(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl
index 5520dd5..84539a1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dc83ce.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_dc83ce(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_dc83ce(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_dc83ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_dc83ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_dc83ce(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_dc83ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_dc83ce(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_dc83ce(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl
index 6c289ca..a366a3d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/de03c6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_de03c6(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_de03c6(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_de03c6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_de03c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_de03c6(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_de03c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_de03c6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_de03c6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl
index bc9e2d2..73ce423 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/deb3c0.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_deb3c0(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_deb3c0(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_deb3c0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_deb3c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_deb3c0(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_deb3c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_deb3c0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_deb3c0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl
index 994934e..8e7b7db 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dee461.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_dee461(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_dee461(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_dee461(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_dee461(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_dee461(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_dee461(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_dee461(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_dee461(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl
index df3f29e..ef2705c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   depth2d_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_dfdc32(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_dfdc32(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_dfdc32(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_dfdc32(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_dfdc32(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_dfdc32(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_dfdc32(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_dfdc32(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl
index e224865..40109a5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e122fe.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e122fe(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_e122fe(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e122fe(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e122fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e122fe(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e122fe(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e122fe(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e122fe(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl
index abd1efc..923bc7e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e18a8b(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e18a8b(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e18a8b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e18a8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e18a8b(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e18a8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e18a8b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e18a8b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl
index e29966d..97b0e91 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4bfd2.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_ms<uint, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e4bfd2(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e4bfd2(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width();
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e4bfd2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e4bfd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e4bfd2(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e4bfd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e4bfd2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e4bfd2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl
index 8f7af6d..220e466 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e4e310(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e4e310(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e4e310(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e4e310(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e4e310(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e4e310(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e4e310(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e4e310(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl
index 6742ed8..0ab2511 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4f021.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e4f021(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e4f021(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e4f021(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e4f021(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e4f021(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e4f021(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e4f021(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e4f021(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl
index 9acd111..e893757 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e50eb8.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e50eb8(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e50eb8(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e50eb8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e50eb8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e50eb8(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e50eb8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e50eb8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e50eb8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl
index ab5a295..4c365aa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e5a203.wgsl.expected.ir.msl
@@ -4,30 +4,38 @@
   texture3d<uint, access::sample> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e5a203(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_e5a203(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint const v_2 = tint_module_vars.arg_0.get_height(v);
   uint3 res = uint3(v_1, v_2, tint_module_vars.arg_0.get_depth(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e5a203(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e5a203(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e5a203(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e5a203(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e5a203(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e5a203(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_3 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_3.pos, .VertexOutput_prevent_dce=v_3.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl
index ccce15c..44d355c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e738f4.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e738f4(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_e738f4(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e738f4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e738f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e738f4(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e738f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e738f4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e738f4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl
index fab18b6..4d21233 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e824b6.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e824b6(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e824b6(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e824b6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e824b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e824b6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e824b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e824b6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e824b6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl
index 6c00f7f..3bdc64a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e99308.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_e99308(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_e99308(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_e99308(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e99308(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e99308(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_e99308(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_e99308(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_e99308(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl
index c95f9ff..1ba62b8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ea066c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ea066c(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_ea066c(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ea066c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ea066c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ea066c(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ea066c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ea066c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ea066c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl
index 83e0421..befddac 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ea25bc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ea25bc(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_ea25bc(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ea25bc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ea25bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ea25bc(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ea25bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ea25bc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ea25bc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl
index 07bf2de..7a835df 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   depth2d_array<float, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_eafe19(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_eafe19(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(1u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_eafe19(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eafe19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eafe19(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eafe19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eafe19(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_eafe19(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl
index bcda284..f24efd1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb03b1.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_eb03b1(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_eb03b1(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_eb03b1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb03b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb03b1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb03b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb03b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_eb03b1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl
index 99d4426..7cae1a5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb10d6.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_eb10d6(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_eb10d6(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_eb10d6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb10d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb10d6(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb10d6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb10d6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_eb10d6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl
index 8758c69..d48662d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb1249.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_eb1249(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_eb1249(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_eb1249(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb1249(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb1249(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb1249(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb1249(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_eb1249(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl
index abd846c..9a483fe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eb9f4d.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_eb9f4d(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_eb9f4d(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_eb9f4d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb9f4d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb9f4d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_eb9f4d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_eb9f4d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_eb9f4d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl
index 9541a0d..41811f5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ed1030.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<uint, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ed1030(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_ed1030(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ed1030(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ed1030(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ed1030(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ed1030(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ed1030(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ed1030(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl
index 365b53b..346c1a8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/ef2e58.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_ef2e58(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_ef2e58(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_ef2e58(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ef2e58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ef2e58(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_ef2e58(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_ef2e58(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_ef2e58(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl
index 859254b..825c5b1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f17acd.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f17acd(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_f17acd(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f17acd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f17acd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f17acd(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f17acd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f17acd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f17acd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl
index 8729687..10c270d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f264a3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f264a3(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_f264a3(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f264a3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f264a3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f264a3(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f264a3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f264a3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f264a3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl
index 93d528f..19a1412 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f3a2ac.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f3a2ac(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_f3a2ac(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f3a2ac(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f3a2ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f3a2ac(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f3a2ac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f3a2ac(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f3a2ac(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl
index 0142ef4..e7608a1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f406ff.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f406ff(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_f406ff(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f406ff(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f406ff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f406ff(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f406ff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f406ff(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f406ff(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl
index ac93118..95a9d00 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f4321c.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<int, access::read> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f4321c(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_f4321c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f4321c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f4321c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f4321c(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f4321c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f4321c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f4321c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl
index 00346b0..1e170cb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f48886.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f48886(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_f48886(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f48886(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f48886(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f48886(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f48886(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f48886(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f48886(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl
index a6bd323..85ba0cb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f4e469.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f4e469(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_f4e469(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f4e469(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f4e469(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f4e469(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f4e469(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f4e469(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f4e469(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl
index 67f986b..1c7dc9f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f55a94.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f55a94(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_f55a94(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f55a94(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f55a94(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f55a94(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f55a94(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f55a94(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f55a94(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl
index 51c7351..1c60d76 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f626b3.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texturecube<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f626b3(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_f626b3(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f626b3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f626b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f626b3(tint_module_vars);
 }
 kernel void compute_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f626b3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f626b3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f626b3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl
index e81031e..36a9b06 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f7bac5.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d_array<int, access::read> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f7bac5(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_f7bac5(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f7bac5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f7bac5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f7bac5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f7bac5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f7bac5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f7bac5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl
index b784112..c18ca73 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f8522e.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f8522e(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_f8522e(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f8522e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f8522e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f8522e(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f8522e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f8522e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f8522e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl
index 9fb5644..b593579 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f93ece.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture3d<float, access::read_write> arg_0;
   device uint3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f93ece(tint_module_vars_struct tint_module_vars) {
+uint3 textureDimensions_f93ece(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint const v_1 = tint_module_vars.arg_0.get_height(0u);
   uint3 res = uint3(v, v_1, tint_module_vars.arg_0.get_depth(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f93ece(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f93ece(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f93ece(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f93ece(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f93ece(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device uint3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f93ece(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl
index b3c546f..7a32c34 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/f94e55.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::read_write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_f94e55(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_f94e55(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_f94e55(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f94e55(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f94e55(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_f94e55(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_f94e55(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_f94e55(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl
index c278f0d..6158f65 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fbb15a.wgsl.expected.ir.msl
@@ -4,28 +4,36 @@
   texture2d<float, access::write> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_fbb15a(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_fbb15a(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   uint2 res = uint2(v, tint_module_vars.arg_0.get_height(0u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_fbb15a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_fbb15a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_fbb15a(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_fbb15a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_fbb15a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_fbb15a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_1 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_1.pos, .VertexOutput_prevent_dce=v_1.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl
index 3b82f3f..59e30fa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fdbae8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_fdbae8(tint_module_vars_struct tint_module_vars) {
+uint textureDimensions_fdbae8(tint_module_vars_struct tint_module_vars) {
   uint res = uint(tint_module_vars.arg_0.get_width());
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_fdbae8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_fdbae8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_fdbae8(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_fdbae8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_fdbae8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_fdbae8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl
index 264ac0d..ce9cee4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.msl
@@ -4,29 +4,37 @@
   texture2d_array<int, access::sample> arg_0;
   device uint2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureDimensions_fdf6e9(tint_module_vars_struct tint_module_vars) {
+uint2 textureDimensions_fdf6e9(tint_module_vars_struct tint_module_vars) {
   uint const v = uint(1);
   uint const v_1 = tint_module_vars.arg_0.get_width(v);
   uint2 res = uint2(v_1, tint_module_vars.arg_0.get_height(v));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureDimensions_fdf6e9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_fdf6e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_fdf6e9(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureDimensions_fdf6e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureDimensions_fdf6e9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureDimensions_fdf6e9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v_2 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_2.pos, .VertexOutput_prevent_dce=v_2.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl
index 39c3cbb..4b8dd97 100644
--- a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_012e11(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_012e11(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_012e11(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_012e11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_012e11(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_012e11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_012e11(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_012e11(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl
index 95ae22c..683f451 100644
--- a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_019da0(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_019da0(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_019da0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_019da0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_019da0(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_019da0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_019da0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_019da0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl
index 69dacbe..bbc159b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_01cd01(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_01cd01(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_01cd01(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_01cd01(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_01cd01(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_01cd01(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_01cd01(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_01cd01(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl
index adef763..08e4a47 100644
--- a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_026217(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_026217(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_026217(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_026217(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_026217(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_026217(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_026217(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_026217(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl
index aa91c46..c50db4d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_02c48d(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_02c48d(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_02c48d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_02c48d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_02c48d(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_02c48d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_02c48d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_02c48d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl
index 6003894..5fd003f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_02ef1f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_02ef1f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_02ef1f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_02ef1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_02ef1f(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_02ef1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_02ef1f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_02ef1f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl
index 4aa9a73..be67446 100644
--- a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_03e03e(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_03e03e(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_03e03e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_03e03e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_03e03e(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_03e03e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_03e03e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_03e03e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl
index 97a9b37..5a612f0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_045ec9(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_045ec9(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_045ec9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_045ec9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_045ec9(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_045ec9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_045ec9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_045ec9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl
index 055fdb4..5598dd0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_04b911(tint_module_vars_struct tint_module_vars) {
+float textureLoad_04b911(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_04b911(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_04b911(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_04b911(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_04b911(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_04b911(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_04b911(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl
index 69721eb..f612307 100644
--- a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_050c33(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_050c33(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_050c33(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_050c33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_050c33(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_050c33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_050c33(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_050c33(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl
index 0d77bbb..1ff6168 100644
--- a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_054350(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_054350(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_054350(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_054350(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_054350(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_054350(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_054350(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_054350(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl
index 68a4185..446c959 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_0674b1(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_0674b1(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_0674b1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_0674b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_0674b1(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_0674b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_0674b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_0674b1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl
index 7fbfa6e..7a62a9e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_06ac37(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_06ac37(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_06ac37(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_06ac37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_06ac37(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_06ac37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_06ac37(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_06ac37(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl
index 280d0cc..71fa254 100644
--- a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_072e26(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_072e26(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_072e26(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_072e26(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_072e26(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_072e26(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_072e26(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_072e26(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl
index 6482902..7dd5a77 100644
--- a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_078bc4(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_078bc4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_078bc4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_078bc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_078bc4(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_078bc4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_078bc4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_078bc4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl
index f3bf5b5..d43d0ed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_0b515a(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_0b515a(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_0b515a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_0b515a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_0b515a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_0b515a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_0b515a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_0b515a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl
index ad77921..28a66c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_0cb698(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_0cb698(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_0cb698(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_0cb698(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_0cb698(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_0cb698(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_0cb698(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_0cb698(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl
index f6ec324..53a77d1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_10db82(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_10db82(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_10db82(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_10db82(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_10db82(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_10db82(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_10db82(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_10db82(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl
index 66dba4d..f4bf678 100644
--- a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_126466(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_126466(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_126466(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_126466(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_126466(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_126466(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_126466(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_126466(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl
index 9592b10..1edf757 100644
--- a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_127e12(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_127e12(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_127e12(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_127e12(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_127e12(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_127e12(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_127e12(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_127e12(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl
index d70b565..a86dc5e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1373dc(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1373dc(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1373dc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1373dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1373dc(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1373dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1373dc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1373dc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl
index 5fc3307..5c3fcc5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_13d539(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_13d539(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_13d539(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_13d539(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_13d539(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_13d539(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_13d539(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_13d539(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl
index fef28ce..73a3fc3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_13e90c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_13e90c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_13e90c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_13e90c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_13e90c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_13e90c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_13e90c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_13e90c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl
index f8b6520..a579538 100644
--- a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_143d84(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_143d84(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_143d84(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_143d84(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_143d84(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_143d84(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_143d84(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_143d84(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl
index 4c4cc23..f9ce2b1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1471b8(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_1471b8(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1471b8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1471b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1471b8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1471b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1471b8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1471b8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl
index 105f7a8..eab4688 100644
--- a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_14cc4c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_14cc4c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_14cc4c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_14cc4c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_14cc4c(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_14cc4c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_14cc4c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_14cc4c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl
index 18d4604..c876057 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1561a7(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_1561a7(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1561a7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1561a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1561a7(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1561a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1561a7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1561a7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl
index b83ee74..f883553 100644
--- a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_15e675(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_15e675(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_15e675(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_15e675(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_15e675(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_15e675(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_15e675(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_15e675(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl
index eea1818..74b13d1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1619bf(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_1619bf(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1619bf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1619bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1619bf(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1619bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1619bf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1619bf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl
index 586764b..602a400 100644
--- a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_168dc8(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_168dc8(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_168dc8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_168dc8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_168dc8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_168dc8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_168dc8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_168dc8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl
index 0b95311..eeeb6df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_170593(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_170593(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_170593(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_170593(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_170593(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_170593(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_170593(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_170593(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl
index 3387a37..c143256 100644
--- a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_17095b(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_17095b(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_17095b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_17095b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_17095b(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_17095b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_17095b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_17095b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl
index 24c92c2..93741a0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_18ac11(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_18ac11(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_18ac11(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_18ac11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_18ac11(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_18ac11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_18ac11(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_18ac11(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl
index 68b3b85..e9bb638 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_19cf87(tint_module_vars_struct tint_module_vars) {
+float textureLoad_19cf87(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_19cf87(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_19cf87(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_19cf87(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_19cf87(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_19cf87(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_19cf87(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl
index 4af4046..28e7bff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_19d6be(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_19d6be(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_19d6be(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_19d6be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_19d6be(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_19d6be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_19d6be(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_19d6be(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl
index 7f389f3..80daaa7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_19e5ca(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_19e5ca(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_19e5ca(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_19e5ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_19e5ca(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_19e5ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_19e5ca(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_19e5ca(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl
index 513e624..3aca8f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1a062f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1a062f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1a062f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1a062f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1a062f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1a062f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1a062f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1a062f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl
index 91d35d6..30b4cb6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1a8452(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_1a8452(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1a8452(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1a8452(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1a8452(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1a8452(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1a8452(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1a8452(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl
index 5c7d88b..bf1ba5b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1aa950(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_1aa950(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1aa950(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1aa950(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1aa950(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1aa950(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1aa950(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1aa950(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl
index 5f56f44..bc1fc5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1b051f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_1b051f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1b051f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1b051f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1b051f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1b051f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1b051f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1b051f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl
index 55795e4..6623ff9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1b4332(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_1b4332(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1b4332(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1b4332(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1b4332(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1b4332(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1b4332(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1b4332(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl
index 245d1f3..b8ebcee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1b8588(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_1b8588(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1b8588(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1b8588(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1b8588(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1b8588(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1b8588(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1b8588(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl
index 260f063..a90cd83 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1bc5ab(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1bc5ab(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1bc5ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1bc5ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1bc5ab(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1bc5ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1bc5ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1bc5ab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
index fb3f304..7e2b374 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.msl
@@ -32,8 +32,13 @@
   const constant tint_ExternalTextureParams* arg_0_params;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
 float3 tint_GammaCorrection(float3 v, tint_GammaTransferParams params) {
@@ -66,23 +71,26 @@
   }
   return float4(v_12, v_8);
 }
-void textureLoad_1bfdfb(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1bfdfb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_TextureLoadExternal(tint_module_vars.arg_0_plane0, tint_module_vars.arg_0_plane1, (*tint_module_vars.arg_0_params), uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1bfdfb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  textureLoad_1bfdfb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1bfdfb(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  textureLoad_1bfdfb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1bfdfb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1bfdfb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params};
+  VertexOutput const v_13 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_13.pos, .VertexOutput_prevent_dce=v_13.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl
index 115459e..a70b658 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1c562a(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_1c562a(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1c562a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1c562a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1c562a(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1c562a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1c562a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1c562a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl
index 3da91a1..74c9ba9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1d43ae(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_1d43ae(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1d43ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1d43ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1d43ae(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1d43ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1d43ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1d43ae(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl
index 4640b79..0900b3c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1e6baa(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1e6baa(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1e6baa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1e6baa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1e6baa(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1e6baa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1e6baa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1e6baa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl
index c652848..bbfa305 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1eb93f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1eb93f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1eb93f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1eb93f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1eb93f(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1eb93f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1eb93f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1eb93f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl
index cf36276..0ecfcca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1f2016(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1f2016(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1f2016(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1f2016(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1f2016(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1f2016(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1f2016(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1f2016(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl
index 56e11dd..a273fda 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_1fde63(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_1fde63(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_1fde63(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1fde63(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1fde63(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_1fde63(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_1fde63(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_1fde63(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl
index 34b795f..03077cf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_206a08(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_206a08(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_206a08(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_206a08(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_206a08(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_206a08(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_206a08(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_206a08(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl
index b7922d4..e906420 100644
--- a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_20fa2f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_20fa2f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_20fa2f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_20fa2f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_20fa2f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_20fa2f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_20fa2f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_20fa2f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl
index 633ce6a..92e6a36 100644
--- a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_216c37(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_216c37(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_216c37(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_216c37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_216c37(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_216c37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_216c37(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_216c37(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl
index 28a6ca5..e2f7612 100644
--- a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_21d1c4(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_21d1c4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_21d1c4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_21d1c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_21d1c4(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_21d1c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_21d1c4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_21d1c4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl
index c81a2f0..7a556ad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_223246(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_223246(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_223246(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_223246(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_223246(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_223246(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_223246(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_223246(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl
index e33c95e..5d50f7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_22e963(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_22e963(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_22e963(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_22e963(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_22e963(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_22e963(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_22e963(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_22e963(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl
index 39f30fd..d11e3be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_23007a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_23007a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_23007a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_23007a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_23007a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_23007a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_23007a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_23007a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl
index 9a05594..88245a4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2363be(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2363be(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2363be(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2363be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2363be(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2363be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2363be(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2363be(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl
index 30ebb92..a99952a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_23ff89(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_23ff89(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_23ff89(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_23ff89(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_23ff89(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_23ff89(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_23ff89(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_23ff89(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl
index c060e6e..c7de668 100644
--- a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_25b67f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_25b67f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_25b67f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_25b67f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_25b67f(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_25b67f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_25b67f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_25b67f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl
index 4d4db5e..ed74d24 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_26b8f6(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_26b8f6(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_26b8f6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_26b8f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_26b8f6(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_26b8f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_26b8f6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_26b8f6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl
index d570eee..b0c8ecb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_26c4f8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_26c4f8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_26c4f8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_26c4f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_26c4f8(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_26c4f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_26c4f8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_26c4f8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl
index f1d359e..b6d87b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_26d7f1(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_26d7f1(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_26d7f1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_26d7f1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_26d7f1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_26d7f1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_26d7f1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_26d7f1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl
index 83ee0dc..0320d02 100644
--- a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_272e7a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_272e7a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_272e7a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_272e7a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_272e7a(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_272e7a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_272e7a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_272e7a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl
index f61052c..6dde6a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_276643(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_276643(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_276643(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_276643(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_276643(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_276643(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_276643(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_276643(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl
index 05a376b..16e352d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_276a2c(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_276a2c(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_276a2c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_276a2c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_276a2c(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_276a2c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_276a2c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_276a2c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl
index a814230..cc47fc1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2887d7(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_2887d7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2887d7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2887d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2887d7(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2887d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2887d7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2887d7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl
index e54c230..74784b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2a82d9(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2a82d9(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2a82d9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2a82d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2a82d9(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2a82d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2a82d9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2a82d9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl
index 07b304b..732139f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2ae485(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2ae485(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2ae485(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2ae485(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2ae485(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2ae485(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2ae485(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2ae485(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl
index 332c86f..bca3e53 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2c72ae(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2c72ae(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2c72ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2c72ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2c72ae(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2c72ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2c72ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2c72ae(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl
index 5141627..a60ab20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2cee30(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2cee30(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2cee30(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2cee30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2cee30(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2cee30(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2cee30(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2cee30(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl
index b64f746..91dcad8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2d479c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_2d479c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2d479c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2d479c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2d479c(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2d479c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2d479c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2d479c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl
index 61195b0..a28354d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2d6cf7(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2d6cf7(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2d6cf7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2d6cf7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2d6cf7(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2d6cf7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2d6cf7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2d6cf7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl
index 4fc944d..b746ef6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2dbfc2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_2dbfc2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2dbfc2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2dbfc2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2dbfc2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2dbfc2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2dbfc2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2dbfc2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl
index 620138b..862e33a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2e09aa(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_2e09aa(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2e09aa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2e09aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2e09aa(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2e09aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2e09aa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2e09aa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl
index b620285..d24f3b3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2e3552(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_2e3552(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2e3552(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2e3552(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2e3552(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2e3552(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2e3552(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2e3552(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl
index 11b6d5a..fec3fab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_2eaf31(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_2eaf31(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_2eaf31(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2eaf31(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2eaf31(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_2eaf31(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_2eaf31(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_2eaf31(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl
index ae9d080..02084be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_313c73(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_313c73(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_313c73(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_313c73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_313c73(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_313c73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_313c73(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_313c73(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl
index 48757f1..d410d57 100644
--- a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_31db4b(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_31db4b(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_31db4b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_31db4b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_31db4b(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_31db4b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_31db4b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_31db4b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl
index 717342e..2b70b20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_321210(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_321210(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_321210(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_321210(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_321210(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_321210(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_321210(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_321210(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl
index db276b0..3628f68 100644
--- a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_32a7b8(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_32a7b8(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_32a7b8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_32a7b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_32a7b8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_32a7b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_32a7b8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_32a7b8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl
index 5b7d2a0..5b5c5ef 100644
--- a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_33d3aa(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_33d3aa(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_33d3aa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_33d3aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_33d3aa(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_33d3aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_33d3aa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_33d3aa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl
index 42a15e8..ea8e644 100644
--- a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_348827(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_348827(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_348827(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_348827(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_348827(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_348827(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_348827(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_348827(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl
index 7721b3d..cd587ab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_34d97c(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_34d97c(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_34d97c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_34d97c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_34d97c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_34d97c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_34d97c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_34d97c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl
index 844dc48..4e4d8f1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_35a5e2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_35a5e2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_35a5e2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_35a5e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_35a5e2(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_35a5e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_35a5e2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_35a5e2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl
index d496275..c68a774 100644
--- a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_35d464(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_35d464(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_35d464(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_35d464(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_35d464(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_35d464(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_35d464(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_35d464(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl
index 2982460..0371cb9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_374351(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_374351(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_374351(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_374351(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_374351(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_374351(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_374351(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_374351(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl
index 3bef4f0..bfd9de7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_388688(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_388688(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_388688(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_388688(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_388688(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_388688(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_388688(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_388688(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl
index 3c5e725..e1949b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_38f8ab(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_38f8ab(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_38f8ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_38f8ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_38f8ab(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_38f8ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_38f8ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_38f8ab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl
index ec3756d..2b4c189 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_39016c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_39016c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_39016c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_39016c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_39016c(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_39016c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_39016c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_39016c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl
index c24bb5e..544967e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_395447(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_395447(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_395447(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_395447(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_395447(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_395447(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_395447(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_395447(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl
index 93972b9..fbc47c7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_39ef40(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_39ef40(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_39ef40(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_39ef40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_39ef40(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_39ef40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_39ef40(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_39ef40(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl
index e478223..6a633af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3a2350(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_3a2350(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3a2350(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3a2350(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3a2350(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3a2350(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3a2350(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3a2350(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl
index ecf541b..aecf67a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3aea13(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_3aea13(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3aea13(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3aea13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3aea13(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3aea13(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3aea13(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3aea13(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl
index f8e97e8..dd32fde 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3bbc2b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3bbc2b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3bbc2b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3bbc2b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3bbc2b(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3bbc2b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3bbc2b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3bbc2b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl
index ccee028..0d6800e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3c0d9e(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_3c0d9e(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3c0d9e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3c0d9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3c0d9e(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3c0d9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3c0d9e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3c0d9e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl
index a89609b..305901e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3c9587(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3c9587(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3c9587(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3c9587(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3c9587(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3c9587(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3c9587(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3c9587(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl
index 87a310c..059d94c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3c96e8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3c96e8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3c96e8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3c96e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3c96e8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3c96e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3c96e8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3c96e8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl
index d04af4c..24d8dbd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3cfb9c(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_3cfb9c(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3cfb9c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3cfb9c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3cfb9c(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3cfb9c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3cfb9c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3cfb9c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl
index 10b3d3e..5ba7d28 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3d001b(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_3d001b(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3d001b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3d001b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3d001b(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3d001b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3d001b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3d001b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl
index c704e97..22858dd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3d3fd1(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_3d3fd1(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3d3fd1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3d3fd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3d3fd1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3d3fd1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3d3fd1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3d3fd1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl
index 8805b44..898a434 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3d9c90(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3d9c90(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3d9c90(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3d9c90(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3d9c90(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3d9c90(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3d9c90(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3d9c90(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl
index 34eb9a4..697d0a8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3da3ed(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3da3ed(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3da3ed(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3da3ed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3da3ed(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3da3ed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3da3ed(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3da3ed(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl
index e530735..fe72d53 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3e16a8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3e16a8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3e16a8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3e16a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3e16a8(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3e16a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3e16a8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3e16a8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl
index 1812412..370122c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_3e5f6a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_3e5f6a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_3e5f6a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3e5f6a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3e5f6a(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_3e5f6a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_3e5f6a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_3e5f6a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl
index 1ce80e9..e3090c1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_40ee8b(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_40ee8b(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_40ee8b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_40ee8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_40ee8b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_40ee8b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_40ee8b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_40ee8b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl
index 4a1b70c..69ca7b8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4212a1(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_4212a1(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4212a1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4212a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4212a1(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4212a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4212a1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4212a1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl
index 2b722c4..cfc5a21 100644
--- a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_424afd(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_424afd(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_424afd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_424afd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_424afd(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_424afd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_424afd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_424afd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl
index a4e2005..0b159a6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_42a631(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_42a631(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_42a631(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_42a631(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_42a631(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_42a631(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_42a631(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_42a631(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl
index 2ad4f4b..12aef7c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_43484a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_43484a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_43484a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_43484a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_43484a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_43484a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_43484a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_43484a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl
index cc70037..4881b02 100644
--- a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_439e2a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_439e2a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_439e2a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_439e2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_439e2a(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_439e2a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_439e2a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_439e2a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl
index 7493377..6eee188 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_43cd86(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_43cd86(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_43cd86(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_43cd86(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_43cd86(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_43cd86(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_43cd86(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_43cd86(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl
index 4d0f5e8..3a61a20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_44c826(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_44c826(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_44c826(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_44c826(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_44c826(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_44c826(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_44c826(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_44c826(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl
index c0da47c..ea0324c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4542ae(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4542ae(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4542ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4542ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4542ae(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4542ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4542ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4542ae(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl
index 8af37f7..574c127 100644
--- a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_454347(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_454347(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_454347(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_454347(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_454347(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_454347(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_454347(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_454347(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl
index 5fb8200..9a19d16 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4638a0(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_4638a0(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4638a0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4638a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4638a0(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4638a0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4638a0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4638a0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl
index b834ed4..3b3312a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_469912(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_469912(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_469912(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_469912(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_469912(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_469912(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_469912(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_469912(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl
index 6566eb2..c20bf3b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_46a93f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_46a93f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_46a93f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_46a93f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_46a93f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_46a93f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_46a93f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_46a93f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl
index 8a65fca..f24271b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_46dbf5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_46dbf5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_46dbf5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_46dbf5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_46dbf5(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_46dbf5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_46dbf5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_46dbf5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl
index 8b5e81e..03735da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_473d3e(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_473d3e(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_473d3e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_473d3e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_473d3e(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_473d3e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_473d3e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_473d3e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl
index 7cf4ac1..903448b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_47e818(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_47e818(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_47e818(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_47e818(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_47e818(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_47e818(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_47e818(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_47e818(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl
index 4986982..2352ec5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_482627(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_482627(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_482627(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_482627(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_482627(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_482627(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_482627(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_482627(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl
index c94e7e2..e133de3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_484344(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_484344(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_484344(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_484344(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_484344(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_484344(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_484344(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_484344(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl
index d865652..d2057d8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4951bb(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4951bb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4951bb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4951bb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4951bb(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4951bb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4951bb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4951bb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl
index a57a0f1..6d20e05 100644
--- a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_49f76f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_49f76f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_49f76f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_49f76f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_49f76f(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_49f76f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_49f76f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_49f76f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl
index 3734437..083eb07 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4a5c55(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_4a5c55(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4a5c55(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4a5c55(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4a5c55(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4a5c55(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4a5c55(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4a5c55(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl
index 6fc43ce..ed0ed91 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4acb64(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4acb64(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4acb64(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4acb64(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4acb64(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4acb64(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4acb64(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4acb64(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl
index 9fdd77b..f3d75fd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4c15b2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4c15b2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4c15b2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c15b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c15b2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c15b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c15b2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4c15b2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl
index 7b77642..56ddeca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4c1a1e(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_4c1a1e(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4c1a1e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c1a1e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c1a1e(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c1a1e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c1a1e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4c1a1e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl
index a362f27..decf7fe 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4c423f(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_4c423f(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4c423f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c423f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c423f(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c423f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c423f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4c423f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl
index 09a390b..a0accd0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4c67be(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4c67be(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4c67be(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c67be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c67be(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4c67be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4c67be(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4c67be(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl
index c47cff1..624608b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4ccf9a(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_4ccf9a(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4ccf9a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4ccf9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4ccf9a(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4ccf9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4ccf9a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4ccf9a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl
index f32227b..33b1121 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4cdca5(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_4cdca5(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4cdca5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4cdca5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4cdca5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4cdca5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4cdca5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4cdca5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl
index a3eea35..a8f8a45 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_ms<float, access::read> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4db25c(tint_module_vars_struct tint_module_vars) {
+float textureLoad_4db25c(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4db25c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4db25c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4db25c(tint_module_vars);
 }
 kernel void compute_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4db25c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4db25c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4db25c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl
index ecaf279..8b06a20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4e2c5c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4e2c5c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4e2c5c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4e2c5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4e2c5c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4e2c5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4e2c5c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4e2c5c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl
index 83fa97b..ffba683 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4f5496(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_4f5496(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4f5496(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4f5496(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4f5496(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4f5496(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4f5496(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4f5496(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl
index acd8051..e195ba3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4f90bb(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4f90bb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4f90bb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4f90bb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4f90bb(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4f90bb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4f90bb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4f90bb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl
index 3bb374d..2dbc3c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4fa6ae(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_4fa6ae(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4fa6ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4fa6ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4fa6ae(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4fa6ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4fa6ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4fa6ae(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl
index b0c42ac..acca58e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_4fd803(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_4fd803(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_4fd803(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4fd803(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4fd803(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_4fd803(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_4fd803(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_4fd803(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl
index 9789d22..42e46ba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_505aa2(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_505aa2(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_505aa2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_505aa2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_505aa2(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_505aa2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_505aa2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_505aa2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl
index cf28535..9f30ab0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_50915c(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_50915c(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_50915c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_50915c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_50915c(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_50915c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_50915c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_50915c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl
index 4984ae3..1e1fe6f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5154e1(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5154e1(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5154e1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5154e1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5154e1(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5154e1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5154e1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5154e1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl
index 200b806..4e28497 100644
--- a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_519ab5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_519ab5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_519ab5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_519ab5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_519ab5(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_519ab5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_519ab5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_519ab5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl
index 613637d..9142f2d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_53378a(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_53378a(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_53378a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_53378a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_53378a(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_53378a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_53378a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_53378a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl
index 22bd3a4..dcae4dd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_53941c(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_53941c(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_53941c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_53941c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_53941c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_53941c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_53941c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_53941c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl
index 4e4a1ba..8f06d08 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_53e142(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_53e142(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_53e142(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_53e142(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_53e142(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_53e142(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_53e142(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_53e142(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl
index e76a7e6..7c29e92 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_54a59b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_54a59b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_54a59b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_54a59b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_54a59b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_54a59b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_54a59b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_54a59b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl
index 30984d3..69e6228 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_54e0ce(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_54e0ce(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_54e0ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_54e0ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_54e0ce(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_54e0ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_54e0ce(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_54e0ce(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl
index 41d510e..59e2eb0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_54fb38(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_54fb38(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_54fb38(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_54fb38(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_54fb38(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_54fb38(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_54fb38(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_54fb38(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl
index ff01d2e..499cee3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_55e745(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_55e745(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_55e745(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_55e745(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_55e745(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_55e745(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_55e745(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_55e745(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl
index c92ccfd..935cf1f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_560573(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_560573(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_560573(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_560573(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_560573(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_560573(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_560573(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_560573(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl
index 6c32da2..d35299f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_56a000(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_56a000(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_56a000(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_56a000(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_56a000(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_56a000(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_56a000(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_56a000(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl
index 30bab04..5b831e3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_582015(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_582015(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_582015(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_582015(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_582015(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_582015(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_582015(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_582015(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl
index bf60bb7..df6cba1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_589eaa(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_589eaa(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_589eaa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_589eaa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_589eaa(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_589eaa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_589eaa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_589eaa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl
index 193cdef..e9ad45b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5a2f9d(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_5a2f9d(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5a2f9d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5a2f9d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5a2f9d(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5a2f9d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5a2f9d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5a2f9d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl
index 09433fd..5cc422d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5abbf2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5abbf2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5abbf2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5abbf2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5abbf2(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5abbf2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5abbf2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5abbf2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl
index 5e6052e..80e2dd3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5b0f5b(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_5b0f5b(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5b0f5b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5b0f5b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5b0f5b(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5b0f5b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5b0f5b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5b0f5b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl
index 6b44477..3f0c2ae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5b4947(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5b4947(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5b4947(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5b4947(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5b4947(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5b4947(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5b4947(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5b4947(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl
index 10a05b0..93d3e04 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5bb7fb(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_5bb7fb(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5bb7fb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5bb7fb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5bb7fb(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5bb7fb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5bb7fb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5bb7fb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl
index 0a0f6c8..8424fe5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5c69f8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5c69f8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5c69f8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5c69f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5c69f8(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5c69f8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5c69f8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5c69f8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl
index 316ba04..ea86898 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5cd3fc(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_5cd3fc(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5cd3fc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5cd3fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5cd3fc(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5cd3fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5cd3fc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5cd3fc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl
index 8ffbc63..45592c2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5cee3b(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_5cee3b(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5cee3b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5cee3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5cee3b(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5cee3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5cee3b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5cee3b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl
index 7509213..09172a8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5d0a2f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_5d0a2f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5d0a2f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5d0a2f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5d0a2f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5d0a2f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5d0a2f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5d0a2f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl
index 0154d65..2503b7f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5d4042(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5d4042(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5d4042(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5d4042(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5d4042(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5d4042(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5d4042(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5d4042(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl
index 92400d3..c63b5cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5dd4c7(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5dd4c7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5dd4c7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5dd4c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5dd4c7(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5dd4c7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5dd4c7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5dd4c7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl
index 9fa49b5..a50b74f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5e17a7(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_5e17a7(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5e17a7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5e17a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5e17a7(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5e17a7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5e17a7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5e17a7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl
index 60139b6..cc2463b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5e1843(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_5e1843(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5e1843(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5e1843(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5e1843(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5e1843(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5e1843(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5e1843(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl
index 419d7ce..d7fd20b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5e8d3f(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_5e8d3f(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5e8d3f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5e8d3f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5e8d3f(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5e8d3f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5e8d3f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5e8d3f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl
index 16a0584..651f3ab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5ed6ad(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5ed6ad(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5ed6ad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5ed6ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5ed6ad(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5ed6ad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5ed6ad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5ed6ad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl
index 2aae674..a502a97 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5f4473(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_5f4473(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5f4473(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5f4473(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5f4473(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5f4473(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5f4473(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5f4473(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl
index e12f478..b5de020 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_5feb4d(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_5feb4d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_5feb4d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5feb4d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5feb4d(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_5feb4d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_5feb4d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_5feb4d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl
index e616203..3c77466 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6154d4(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_6154d4(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6154d4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6154d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6154d4(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6154d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6154d4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6154d4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl
index 81b4279..237fae0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_61e2e8(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_61e2e8(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_61e2e8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_61e2e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_61e2e8(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_61e2e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_61e2e8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_61e2e8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl
index 2a298e6..9f9798a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_620caa(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_620caa(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_620caa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_620caa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_620caa(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_620caa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_620caa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_620caa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl
index 0dfd90d..ffbb13d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_622278(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_622278(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_622278(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_622278(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_622278(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_622278(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_622278(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_622278(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl
index 08e6b1b..2106c48 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_ms<float, access::read> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6273b1(tint_module_vars_struct tint_module_vars) {
+float textureLoad_6273b1(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6273b1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6273b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6273b1(tint_module_vars);
 }
 kernel void compute_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6273b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6273b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6273b1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl
index c1c9707..5191777 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_62d125(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_62d125(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_62d125(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_62d125(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_62d125(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_62d125(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_62d125(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_62d125(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl
index 7cbb7a1..ddd0ea2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_62d1de(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_62d1de(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_62d1de(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_62d1de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_62d1de(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_62d1de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_62d1de(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_62d1de(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl
index 1cb87b7..297c5b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_639962(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_639962(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_639962(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_639962(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_639962(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_639962(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_639962(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_639962(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl
index 6bb0eeb..6a54eb4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_63be18(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_63be18(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_63be18(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_63be18(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_63be18(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_63be18(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_63be18(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_63be18(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl
index 603215d..96927f2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_64c372(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_64c372(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_64c372(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_64c372(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_64c372(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_64c372(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_64c372(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_64c372(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl
index d31757a..bc78ad5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_656d76(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_656d76(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_656d76(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_656d76(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_656d76(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_656d76(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_656d76(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_656d76(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl
index 721c119..c00744f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_65a4d0(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_65a4d0(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_65a4d0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_65a4d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_65a4d0(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_65a4d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_65a4d0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_65a4d0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl
index 597a36a..aafaa3e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_666010(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_666010(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_666010(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_666010(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_666010(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_666010(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_666010(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_666010(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl
index 7314323..7f94a7c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6678b6(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_6678b6(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6678b6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6678b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6678b6(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6678b6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6678b6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6678b6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl
index f490a5a..81e67da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_66be47(tint_module_vars_struct tint_module_vars) {
+float textureLoad_66be47(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_66be47(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_66be47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_66be47(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_66be47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_66be47(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_66be47(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl
index 8d98b83..9906d8c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_67d826(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_67d826(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_67d826(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_67d826(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_67d826(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_67d826(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_67d826(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_67d826(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl
index b930875..6d91317 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_67edca(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_67edca(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_67edca(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_67edca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_67edca(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_67edca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_67edca(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_67edca(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl
index d88cb41..4c02eda 100644
--- a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_68d273(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_68d273(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_68d273(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_68d273(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_68d273(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_68d273(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_68d273(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_68d273(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl
index 238c9fa..dd7c390 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_ms<float, access::read> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6925bc(tint_module_vars_struct tint_module_vars) {
+float textureLoad_6925bc(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6925bc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6925bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6925bc(tint_module_vars);
 }
 kernel void compute_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6925bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6925bc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6925bc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl
index e317dd4..45eead3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_69fee5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_69fee5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_69fee5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_69fee5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_69fee5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_69fee5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_69fee5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_69fee5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl
index 3f9a9b9..a94f204 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6a6871(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6a6871(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6a6871(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6a6871(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6a6871(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6a6871(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6a6871(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6a6871(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl
index ce57e7e..f21957d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6b77d4(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_6b77d4(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6b77d4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6b77d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6b77d4(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6b77d4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6b77d4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6b77d4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl
index a3b0be0..0799e69 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6b8ba6(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6b8ba6(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6b8ba6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6b8ba6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6b8ba6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6b8ba6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6b8ba6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6b8ba6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl
index e2600c6..47018db 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6ba9ab(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6ba9ab(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6ba9ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6ba9ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6ba9ab(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6ba9ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6ba9ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6ba9ab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl
index 27fd704..2eecfb8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6bf3e2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6bf3e2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6bf3e2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6bf3e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6bf3e2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6bf3e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6bf3e2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6bf3e2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl
index 33d2c36..efeeefa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6bf4b7(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_6bf4b7(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6bf4b7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6bf4b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6bf4b7(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6bf4b7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6bf4b7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6bf4b7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl
index 3f3cfe1..5aa8f1e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6d1fb4(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_6d1fb4(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6d1fb4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6d1fb4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6d1fb4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6d1fb4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6d1fb4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6d1fb4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl
index 37b924a..3e0906d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6d376a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6d376a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6d376a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6d376a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6d376a(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6d376a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6d376a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6d376a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl
index 5e9083a..197c3d5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6d7bb5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6d7bb5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6d7bb5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6d7bb5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6d7bb5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6d7bb5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6d7bb5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6d7bb5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl
index df997f0..29fb0fd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6e903f(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_6e903f(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6e903f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6e903f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6e903f(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6e903f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6e903f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6e903f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl
index 7a89b0e..b55bd8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6f0370(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6f0370(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6f0370(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f0370(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f0370(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f0370(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f0370(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6f0370(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl
index 852eae9..8eb185b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6f0ea8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6f0ea8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6f0ea8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f0ea8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f0ea8(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f0ea8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f0ea8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6f0ea8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl
index 5b0d6cd..b7dcd76 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6f1750(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6f1750(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6f1750(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f1750(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f1750(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f1750(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f1750(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6f1750(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl
index 1d76187..53c6034 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_6f8927(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_6f8927(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_6f8927(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f8927(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f8927(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_6f8927(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_6f8927(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_6f8927(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl
index 1d7c431..3cf541f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_714471(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_714471(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_714471(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_714471(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_714471(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_714471(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_714471(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_714471(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl
index adc1073..9f4bbd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_72bb3c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_72bb3c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_72bb3c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_72bb3c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_72bb3c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_72bb3c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_72bb3c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_72bb3c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl
index 686c337..11d9a1a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_72c9c3(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_72c9c3(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_72c9c3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_72c9c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_72c9c3(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_72c9c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_72c9c3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_72c9c3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl
index 02f490a..5205fff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_742f1b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_742f1b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_742f1b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_742f1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_742f1b(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_742f1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_742f1b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_742f1b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl
index 280a007..a75a61c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_749704(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_749704(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_749704(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_749704(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_749704(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_749704(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_749704(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_749704(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl
index 93db362..8e532c1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_74a387(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_74a387(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_74a387(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_74a387(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_74a387(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_74a387(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_74a387(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_74a387(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl
index e2d6b7f..c6d7fa1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_773c46(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_773c46(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_773c46(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_773c46(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_773c46(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_773c46(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_773c46(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_773c46(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl
index 22432a9..fcc5ce6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_789045(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_789045(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_789045(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_789045(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_789045(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_789045(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_789045(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_789045(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl
index b1b7252..a9ce569 100644
--- a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_79e697(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_79e697(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_79e697(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_79e697(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_79e697(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_79e697(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_79e697(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_79e697(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl
index 54391a1..7a124eb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7ab4df(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_7ab4df(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7ab4df(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7ab4df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7ab4df(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7ab4df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7ab4df(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7ab4df(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl
index 8634c7a..3d7279b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7b63e0(tint_module_vars_struct tint_module_vars) {
+float textureLoad_7b63e0(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7b63e0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7b63e0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7b63e0(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7b63e0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7b63e0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7b63e0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl
index 01c1dc6..13819c1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7bee94(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_7bee94(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7bee94(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7bee94(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7bee94(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7bee94(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7bee94(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7bee94(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl
index caef1c5..b29380b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7c90e5(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_7c90e5(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7c90e5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7c90e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7c90e5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7c90e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7c90e5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7c90e5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl
index 8d8a948..3b6aaf1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7dab57(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_7dab57(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7dab57(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7dab57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7dab57(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7dab57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7dab57(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7dab57(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl
index 6c0e2d3..a0fb1d0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7dd3d5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_7dd3d5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7dd3d5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7dd3d5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7dd3d5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7dd3d5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7dd3d5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7dd3d5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl
index f110aa4..584fb01 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7e5cbc(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_7e5cbc(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7e5cbc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7e5cbc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7e5cbc(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7e5cbc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7e5cbc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7e5cbc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl
index 8e3ace3..43c3747 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_7fd822(tint_module_vars_struct tint_module_vars) {
+float textureLoad_7fd822(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_7fd822(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7fd822(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7fd822(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_7fd822(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_7fd822(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_7fd822(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl
index 69d6b7d..4e78326 100644
--- a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_80dae1(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_80dae1(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_80dae1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_80dae1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_80dae1(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_80dae1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_80dae1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_80dae1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl
index 72260d1..394c5da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_81c381(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_81c381(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_81c381(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_81c381(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_81c381(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_81c381(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_81c381(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_81c381(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl
index 2cf0eb4..6751f70 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_83162f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_83162f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_83162f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_83162f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_83162f(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_83162f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_83162f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_83162f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl
index ff099fe..d9f0b56 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_83cea4(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_83cea4(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_83cea4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_83cea4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_83cea4(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_83cea4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_83cea4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_83cea4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl
index 744f565..25bc187 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_83d6e3(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_83d6e3(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_83d6e3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_83d6e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_83d6e3(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_83d6e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_83d6e3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_83d6e3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl
index ae3af3a..9389b06 100644
--- a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_848d85(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_848d85(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_848d85(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_848d85(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_848d85(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_848d85(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_848d85(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_848d85(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl
index d9cdd2f..2cbb02c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_84a438(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_84a438(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_84a438(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_84a438(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_84a438(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_84a438(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_84a438(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_84a438(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl
index fd9c14e..bf13b42 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_84c728(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_84c728(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_84c728(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_84c728(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_84c728(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_84c728(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_84c728(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_84c728(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl
index 3175ce9..0fe3a03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_84dee1(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_84dee1(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_84dee1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_84dee1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_84dee1(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_84dee1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_84dee1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_84dee1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl
index 834dbcb..637193c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8527b1(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_8527b1(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8527b1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8527b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8527b1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8527b1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8527b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8527b1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl
index 3588057..040e408 100644
--- a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_862833(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_862833(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_862833(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_862833(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_862833(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_862833(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_862833(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_862833(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl
index bc6672b..9f5b18d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_878e24(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_878e24(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_878e24(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_878e24(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_878e24(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_878e24(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_878e24(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_878e24(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl
index ca8c7a4..d0d21eb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_87be85(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_87be85(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_87be85(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_87be85(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_87be85(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_87be85(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_87be85(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_87be85(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl
index d5fc2d5..0cac8f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_87f0a6(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_87f0a6(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_87f0a6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_87f0a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_87f0a6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_87f0a6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_87f0a6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_87f0a6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl
index f92e8d8..54ba917 100644
--- a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_881349(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_881349(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_881349(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_881349(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_881349(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_881349(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_881349(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_881349(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl
index 1eb6402..cd4f9ed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_89620b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_89620b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_89620b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_89620b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_89620b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_89620b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_89620b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_89620b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl
index 9e9f3d6..73ea216 100644
--- a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_897cf3(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_897cf3(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_897cf3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_897cf3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_897cf3(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_897cf3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_897cf3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_897cf3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl
index 7b41da1..4d04258 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8a291b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_8a291b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8a291b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8a291b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8a291b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8a291b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8a291b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8a291b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl
index ea40eee..22f119e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8a9988(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_8a9988(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8a9988(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8a9988(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8a9988(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8a9988(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8a9988(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8a9988(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
index 4cef02b..57d8e1d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.msl
@@ -32,8 +32,13 @@
   const constant tint_ExternalTextureParams* arg_0_params;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
 float3 tint_GammaCorrection(float3 v, tint_GammaTransferParams params) {
@@ -66,24 +71,27 @@
   }
   return float4(v_12, v_8);
 }
-void textureLoad_8acf41(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_8acf41(tint_module_vars_struct tint_module_vars) {
   tint_ExternalTextureParams const v_13 = (*tint_module_vars.arg_0_params);
   float4 res = tint_TextureLoadExternal(tint_module_vars.arg_0_plane0, tint_module_vars.arg_0_plane1, v_13, uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8acf41(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  textureLoad_8acf41(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8acf41(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  textureLoad_8acf41(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8acf41(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8acf41(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params};
+  VertexOutput const v_14 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_14.pos, .VertexOutput_prevent_dce=v_14.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl
index aad790f..cd817c0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8b62fb(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_8b62fb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8b62fb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8b62fb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8b62fb(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8b62fb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8b62fb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8b62fb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl
index c55f022..5c77b2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8bf8c2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_8bf8c2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8bf8c2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8bf8c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8bf8c2(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8bf8c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8bf8c2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8bf8c2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl
index 068700d..61833bd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8c6176(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_8c6176(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8c6176(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8c6176(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8c6176(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8c6176(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8c6176(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8c6176(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl
index 1a7d672..72f0183 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8ccbe3(tint_module_vars_struct tint_module_vars) {
+float textureLoad_8ccbe3(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8ccbe3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8ccbe3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8ccbe3(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8ccbe3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8ccbe3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8ccbe3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl
index 145c23b..a7a0f79 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8d64c3(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_8d64c3(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8d64c3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8d64c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8d64c3(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8d64c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8d64c3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8d64c3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl
index 9c84dfd..099562c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8db0ce(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_8db0ce(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8db0ce(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8db0ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8db0ce(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8db0ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8db0ce(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8db0ce(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl
index 5a587d9..130688a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8e5032(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_8e5032(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8e5032(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8e5032(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8e5032(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8e5032(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8e5032(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8e5032(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl
index 8576064..c68a304 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8e68c9(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_8e68c9(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8e68c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8e68c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8e68c9(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8e68c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8e68c9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8e68c9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl
index 71c47b2..288f500 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8fc29b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_8fc29b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8fc29b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8fc29b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8fc29b(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8fc29b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8fc29b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8fc29b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl
index 38b71f0..33ece4d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_8ff033(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_8ff033(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_8ff033(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8ff033(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8ff033(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_8ff033(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_8ff033(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_8ff033(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl
index 8fb4a39..687b6b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_91ede5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_91ede5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_91ede5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_91ede5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_91ede5(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_91ede5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_91ede5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_91ede5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl
index b75bf88..cf1e3bf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9242e7(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_9242e7(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9242e7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9242e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9242e7(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9242e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9242e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9242e7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl
index b389bc8..5eca35e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_92dd61(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_92dd61(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_92dd61(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_92dd61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_92dd61(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_92dd61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_92dd61(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_92dd61(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl
index 4fe13a8..1e76b4d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_92eb1f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_92eb1f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_92eb1f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_92eb1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_92eb1f(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_92eb1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_92eb1f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_92eb1f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl
index 11551e3..542bea9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_936952(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_936952(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_936952(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_936952(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_936952(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_936952(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_936952(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_936952(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl
index 6d1245e..a6aa6a4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_93f23e(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_93f23e(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_93f23e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_93f23e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_93f23e(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_93f23e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_93f23e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_93f23e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl
index 7a0dcac..bee66a8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_947107(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_947107(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_947107(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_947107(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_947107(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_947107(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_947107(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_947107(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl
index 5c0c0fc..7027075 100644
--- a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_96efd5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_96efd5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_96efd5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_96efd5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_96efd5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_96efd5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_96efd5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_96efd5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl
index 9959c6a..561da5e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_970308(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_970308(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_970308(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_970308(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_970308(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_970308(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_970308(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_970308(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl
index 183be02..9d261d9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9885b0(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_9885b0(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9885b0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9885b0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9885b0(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9885b0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9885b0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9885b0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl
index 69bf93f..232422f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_99d8fa(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_99d8fa(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_99d8fa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_99d8fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_99d8fa(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_99d8fa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_99d8fa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_99d8fa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl
index f228e2b..18e10c2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9a7c90(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_9a7c90(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9a7c90(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9a7c90(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9a7c90(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9a7c90(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9a7c90(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9a7c90(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl
index c684ec9..1034230 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9a8c1e(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_9a8c1e(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9a8c1e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9a8c1e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9a8c1e(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9a8c1e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9a8c1e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9a8c1e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl
index be0c54f..b7e9a31 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9aa733(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_9aa733(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9aa733(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9aa733(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9aa733(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9aa733(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9aa733(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9aa733(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl
index cf713c2..1f23ecf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9b2667(tint_module_vars_struct tint_module_vars) {
+float textureLoad_9b2667(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9b2667(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9b2667(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9b2667(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9b2667(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9b2667(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9b2667(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl
index b3eea83..9397a62 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9b5343(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_9b5343(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9b5343(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9b5343(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9b5343(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9b5343(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9b5343(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9b5343(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl
index 7dcf700..a7e6e2c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9c2376(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_9c2376(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9c2376(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9c2376(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9c2376(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9c2376(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9c2376(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9c2376(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl
index 252d5c3..a64d9ba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9c2a14(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_9c2a14(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9c2a14(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9c2a14(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9c2a14(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9c2a14(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9c2a14(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9c2a14(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl
index d1d0377..ba52b44 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9cf7df(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_9cf7df(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9cf7df(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9cf7df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9cf7df(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9cf7df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9cf7df(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9cf7df(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl
index 092f18b..8a97db1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9d70e9(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_9d70e9(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9d70e9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9d70e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9d70e9(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9d70e9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9d70e9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9d70e9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl
index ee4ee68..78a92be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9de6f5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_9de6f5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9de6f5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9de6f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9de6f5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9de6f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9de6f5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9de6f5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl
index 057bdfe..aeb9eaa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9ed19e(tint_module_vars_struct tint_module_vars) {
+float textureLoad_9ed19e(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9ed19e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9ed19e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9ed19e(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9ed19e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9ed19e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9ed19e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl
index e36374d..ab6bdfc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9fa9fd(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_9fa9fd(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9fa9fd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9fa9fd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9fa9fd(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9fa9fd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9fa9fd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9fa9fd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl
index 7e292c9..e539492 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9fbfd9(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_9fbfd9(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9fbfd9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9fbfd9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9fbfd9(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9fbfd9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9fbfd9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9fbfd9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl
index 2b4f610..c082316 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_9fd7be(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_9fd7be(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_9fd7be(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9fd7be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9fd7be(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_9fd7be(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_9fd7be(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_9fd7be(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl
index d51c006..f2b1da2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a03af1(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a03af1(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a03af1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a03af1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a03af1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a03af1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a03af1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a03af1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl
index 2b9d405..61e6342 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a24be1(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a24be1(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a24be1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a24be1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a24be1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a24be1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a24be1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a24be1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl
index 0f61e40..975b0a2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a2b3f4(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a2b3f4(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a2b3f4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a2b3f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a2b3f4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a2b3f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a2b3f4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a2b3f4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl
index e84d477..f59d6af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a3733f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a3733f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a3733f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a3733f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a3733f(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a3733f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a3733f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a3733f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl
index 936fe71..9772137 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a3f122(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a3f122(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a3f122(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a3f122(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a3f122(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a3f122(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a3f122(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a3f122(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl
index 4b1ad01..ee5f008 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a548a8(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a548a8(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a548a8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a548a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a548a8(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a548a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a548a8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a548a8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl
index 2a41d52..b1a574c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a54e11(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_a54e11(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a54e11(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a54e11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a54e11(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a54e11(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a54e11(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a54e11(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl
index e07796a..48deac4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a583c9(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a583c9(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a583c9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a583c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a583c9(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a583c9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a583c9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a583c9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl
index ae20ca9..6c7b2d0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a5c4e2(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a5c4e2(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a5c4e2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a5c4e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a5c4e2(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a5c4e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a5c4e2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a5c4e2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl
index c8a470f..8eb168d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a5e0a5(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a5e0a5(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a5e0a5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a5e0a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a5e0a5(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a5e0a5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a5e0a5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a5e0a5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl
index c7eb668..662be0d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a64b1d(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a64b1d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a64b1d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a64b1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a64b1d(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a64b1d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a64b1d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a64b1d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl
index caf0fd4..51898df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a6a85a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a6a85a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a6a85a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a6a85a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a6a85a(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a6a85a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a6a85a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a6a85a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl
index 5ca3360..97cba87 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a6b61d(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_a6b61d(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a6b61d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a6b61d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a6b61d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a6b61d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a6b61d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a6b61d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl
index d34f209..c171aff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a7444c(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a7444c(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a7444c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7444c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7444c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7444c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7444c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a7444c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl
index fcc7ed7..53e6a78 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a7a3c3(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_a7a3c3(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a7a3c3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7a3c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7a3c3(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7a3c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7a3c3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a7a3c3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl
index affb76d..f822742 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a7bcb4(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a7bcb4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a7bcb4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7bcb4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7bcb4(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7bcb4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7bcb4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a7bcb4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl
index 454ab45..9543157 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a7c171(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_a7c171(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a7c171(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7c171(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7c171(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a7c171(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a7c171(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a7c171(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl
index 7202270..43f673a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a8549b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a8549b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a8549b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a8549b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a8549b(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a8549b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a8549b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a8549b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl
index 9ca2364..3219ecd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a92b18(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_a92b18(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a92b18(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a92b18(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a92b18(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a92b18(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a92b18(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a92b18(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl
index ba81e67..04ec210 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_a9a9f5(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_a9a9f5(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_a9a9f5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a9a9f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a9a9f5(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_a9a9f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_a9a9f5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_a9a9f5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl
index 44e31ce..0711bb7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aa2579(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_aa2579(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aa2579(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aa2579(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aa2579(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aa2579(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aa2579(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aa2579(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl
index 3f0f316..335c80d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aa6130(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_aa6130(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aa6130(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aa6130(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aa6130(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aa6130(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aa6130(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aa6130(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl
index 29a2ef6..8abe334 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aa8a0d(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_aa8a0d(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aa8a0d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aa8a0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aa8a0d(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aa8a0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aa8a0d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aa8a0d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl
index 1bf555d..db8c1b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aae7f6(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_aae7f6(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aae7f6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aae7f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aae7f6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aae7f6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aae7f6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aae7f6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl
index cbf1b95..78a9545 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aae9c3(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_aae9c3(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aae9c3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aae9c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aae9c3(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aae9c3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aae9c3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aae9c3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl
index 401a068..aae9f30 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ac64f7(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_ac64f7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ac64f7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ac64f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ac64f7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ac64f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ac64f7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ac64f7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl
index ac11372..cf006b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_acf22f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_acf22f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_acf22f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_acf22f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_acf22f(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_acf22f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_acf22f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_acf22f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl
index f5ac5d7..94e8c68 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ad551e(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_ad551e(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ad551e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ad551e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ad551e(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ad551e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ad551e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ad551e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl
index 784f4b5..6a7790b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aeae73(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_aeae73(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aeae73(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aeae73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aeae73(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aeae73(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aeae73(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aeae73(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl
index 83d1821..e51b3d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_aebc09(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_aebc09(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_aebc09(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aebc09(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aebc09(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_aebc09(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_aebc09(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_aebc09(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl
index 99ef7a7..05f20b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_af0507(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_af0507(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_af0507(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_af0507(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_af0507(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_af0507(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_af0507(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_af0507(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl
index 152eb3e..232bd7d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b1bf79(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_b1bf79(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b1bf79(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b1bf79(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b1bf79(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b1bf79(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b1bf79(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b1bf79(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl
index 5851291..a62e288 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b1ca35(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_b1ca35(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b1ca35(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b1ca35(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b1ca35(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b1ca35(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b1ca35(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b1ca35(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl
index 9cb92bd..2868ef9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b24d27(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_b24d27(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b24d27(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b24d27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b24d27(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b24d27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b24d27(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b24d27(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl
index 407dce0..5a9dd43 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b25644(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_b25644(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b25644(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b25644(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b25644(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b25644(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b25644(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b25644(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl
index 5cd4919..0914ab3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b27c33(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_b27c33(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b27c33(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b27c33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b27c33(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b27c33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b27c33(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b27c33(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl
index 770fe4e..2c9bd69 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b29f71(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_b29f71(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b29f71(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b29f71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b29f71(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b29f71(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b29f71(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b29f71(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl
index 60a8925..7dd3f74 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b4d6c4(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_b4d6c4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b4d6c4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b4d6c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b4d6c4(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b4d6c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b4d6c4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b4d6c4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl
index dc24188..1a2b6da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b58c6d(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_b58c6d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b58c6d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b58c6d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b58c6d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b58c6d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b58c6d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b58c6d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl
index cbabba2..4383bd3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b60a86(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_b60a86(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b60a86(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b60a86(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b60a86(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b60a86(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b60a86(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b60a86(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl
index 2275a4c..b4e31c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b60db7(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_b60db7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b60db7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b60db7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b60db7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b60db7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b60db7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b60db7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl
index 5235c4e..ed9e9cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b6ba5d(tint_module_vars_struct tint_module_vars) {
+float textureLoad_b6ba5d(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b6ba5d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b6ba5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b6ba5d(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b6ba5d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b6ba5d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b6ba5d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl
index 44686caa..e11152f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b6c458(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_b6c458(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b6c458(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b6c458(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b6c458(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b6c458(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b6c458(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b6c458(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl
index 70d6738..577ebd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b73f6b(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_b73f6b(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b73f6b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b73f6b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b73f6b(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b73f6b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b73f6b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b73f6b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl
index 9620c23..e5c6ab8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b75c8f(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_b75c8f(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b75c8f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b75c8f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b75c8f(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b75c8f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b75c8f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b75c8f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl
index e4b8351..640d4fb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b75d4a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_b75d4a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b75d4a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b75d4a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b75d4a(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b75d4a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b75d4a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b75d4a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl
index 76296c0..65fa9fa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b7f74f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_b7f74f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b7f74f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b7f74f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b7f74f(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b7f74f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b7f74f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b7f74f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl
index c01f7d6..8e6769f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b80e7e(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_b80e7e(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b80e7e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b80e7e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b80e7e(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b80e7e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b80e7e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b80e7e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl
index 39d3087..854da00 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_b94d15(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_b94d15(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_b94d15(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b94d15(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b94d15(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_b94d15(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_b94d15(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_b94d15(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl
index 8162362..ebd92f7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ba023a(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_ba023a(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ba023a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ba023a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ba023a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ba023a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ba023a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ba023a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl
index a0bb79c..4435ed3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ba74b2(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_ba74b2(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ba74b2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ba74b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ba74b2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ba74b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ba74b2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ba74b2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl
index 4492cd0..31c5d82 100644
--- a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_babdf3(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_babdf3(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_babdf3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_babdf3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_babdf3(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_babdf3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_babdf3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_babdf3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl
index 65464e2..f5a0a39 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bba04a(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_bba04a(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bba04a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bba04a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bba04a(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bba04a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bba04a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bba04a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl
index 6a82e47..abba077 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bbb762(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_bbb762(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bbb762(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bbb762(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bbb762(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bbb762(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bbb762(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bbb762(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl
index 1ff5807..9d09322 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bc3201(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_bc3201(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bc3201(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bc3201(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bc3201(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bc3201(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bc3201(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bc3201(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl
index 8373eaf..1534a01 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bc882d(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_bc882d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bc882d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bc882d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bc882d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bc882d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bc882d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bc882d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl
index cd1d1b5..1401836 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bcbb3c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_bcbb3c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bcbb3c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bcbb3c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bcbb3c(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bcbb3c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bcbb3c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bcbb3c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl
index e86fdb9..7b7368f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bd990a(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_bd990a(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bd990a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bd990a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bd990a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bd990a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bd990a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bd990a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl
index 30046d7..3d22e42 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bdc67a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_bdc67a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bdc67a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bdc67a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bdc67a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bdc67a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bdc67a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bdc67a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl
index 8be009f..4233506 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_bfd154(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_bfd154(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_bfd154(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bfd154(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bfd154(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_bfd154(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_bfd154(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_bfd154(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl
index 6f30e6b..1493999 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c02b74(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_c02b74(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c02b74(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c02b74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c02b74(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c02b74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c02b74(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c02b74(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl
index f7d6ab2..3652109 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c07013(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_c07013(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c07013(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c07013(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c07013(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c07013(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c07013(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c07013(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl
index 0cdcb92..f4710f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c16e00(tint_module_vars_struct tint_module_vars) {
+float textureLoad_c16e00(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c16e00(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c16e00(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c16e00(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c16e00(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c16e00(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c16e00(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl
index 070ed25..1905b3d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c21b33(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_c21b33(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c21b33(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c21b33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c21b33(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c21b33(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c21b33(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c21b33(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl
index 5bedccb..60a7df7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c2a480(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c2a480(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c2a480(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c2a480(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c2a480(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c2a480(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c2a480(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c2a480(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl
index 471b31d..ef8d3df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c2d09a(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_c2d09a(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c2d09a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c2d09a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c2d09a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c2d09a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c2d09a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c2d09a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl
index b4eba65..0b86d3e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c378ee(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_c378ee(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c378ee(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c378ee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c378ee(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c378ee(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c378ee(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c378ee(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl
index 962863d..a3970bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c40dcb(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_c40dcb(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c40dcb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c40dcb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c40dcb(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c40dcb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c40dcb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c40dcb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl
index f398ca1..9210874 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c456bc(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_c456bc(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c456bc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c456bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c456bc(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c456bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c456bc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c456bc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl
index 4f8a111..9027b2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c5791b(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c5791b(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c5791b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c5791b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c5791b(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c5791b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c5791b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c5791b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl
index 39dfa90..feca22e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c5c86d(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c5c86d(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c5c86d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c5c86d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c5c86d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c5c86d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c5c86d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c5c86d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl
index bb22d29..51e458d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c66b20(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c66b20(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c66b20(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c66b20(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c66b20(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c66b20(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c66b20(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c66b20(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl
index 9627c87..4d8ac8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c7cbed(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_c7cbed(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c7cbed(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c7cbed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c7cbed(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c7cbed(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c7cbed(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c7cbed(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl
index 33fc6f7..2b8ba20 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c7e313(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_c7e313(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c7e313(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c7e313(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c7e313(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c7e313(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c7e313(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c7e313(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl
index fdea9a7..13eca08 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c80691(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c80691(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c80691(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c80691(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c80691(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c80691(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c80691(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c80691(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl
index 9fdb702..ce74441 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c8ed19(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_c8ed19(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c8ed19(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c8ed19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c8ed19(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c8ed19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c8ed19(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c8ed19(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl
index 01b6bcf..25ce05e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c98bf4(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_c98bf4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c98bf4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c98bf4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c98bf4(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c98bf4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c98bf4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c98bf4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl
index 8c81ead..6365ec8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c9b083(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c9b083(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c9b083(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c9b083(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c9b083(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c9b083(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c9b083(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c9b083(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl
index 3519354..8f5382f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c9cc40(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c9cc40(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c9cc40(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c9cc40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c9cc40(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c9cc40(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c9cc40(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c9cc40(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl
index 8663ad7..b8c6cee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_c9f310(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_c9f310(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_c9f310(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c9f310(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c9f310(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_c9f310(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_c9f310(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_c9f310(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl
index 49e9dab..c729d6b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cac876(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_cac876(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cac876(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cac876(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cac876(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cac876(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cac876(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cac876(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl
index f1227e5..c600712 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cad5f2(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_cad5f2(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cad5f2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cad5f2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cad5f2(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cad5f2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cad5f2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cad5f2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl
index bb94de3..444c0cc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cb57c2(tint_module_vars_struct tint_module_vars) {
+float textureLoad_cb57c2(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cb57c2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cb57c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cb57c2(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cb57c2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cb57c2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cb57c2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl
index 4cb3275..a26b57d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cdbcf6(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_cdbcf6(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cdbcf6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cdbcf6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cdbcf6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cdbcf6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cdbcf6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cdbcf6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl
index 3d481f6..bb5645e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cdccd2(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_cdccd2(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cdccd2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cdccd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cdccd2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cdccd2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cdccd2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cdccd2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl
index 046c14c..bdf9cbc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cdd343(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_cdd343(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cdd343(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cdd343(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cdd343(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cdd343(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cdd343(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cdd343(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl
index 31ace54..d3775f7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cddf6b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_cddf6b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cddf6b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cddf6b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cddf6b(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cddf6b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cddf6b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cddf6b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl
index 07c02f5..d29ccc5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cec477(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_cec477(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cec477(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cec477(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cec477(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cec477(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cec477(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cec477(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl
index 79a62cd..37947ff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_cece6c(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_cece6c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_cece6c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cece6c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cece6c(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_cece6c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_cece6c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_cece6c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl
index d137662..bfebcdd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d02afc(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d02afc(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d02afc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d02afc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d02afc(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d02afc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d02afc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d02afc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl
index aea41f6..f6f4d1a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d0e351(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_d0e351(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d0e351(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d0e351(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d0e351(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d0e351(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d0e351(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d0e351(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl
index c06a664..7a55b7f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d357bb(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_d357bb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d357bb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d357bb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d357bb(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d357bb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d357bb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d357bb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl
index 75a637b..81183c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d37a08(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_d37a08(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d37a08(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d37a08(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d37a08(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d37a08(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d37a08(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d37a08(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl
index 7ef6d20..2fb17e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d3d8fc(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d3d8fc(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d3d8fc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d3d8fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d3d8fc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d3d8fc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d3d8fc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d3d8fc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl
index f776fef..8cce0cc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d41c72(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d41c72(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d41c72(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d41c72(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d41c72(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d41c72(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d41c72(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d41c72(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl
index 8f73798..8436131 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d4df19(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_d4df19(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d4df19(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d4df19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d4df19(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d4df19(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d4df19(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d4df19(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl
index a2886e3..6193386 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d5c48d(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_d5c48d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d5c48d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d5c48d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d5c48d(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d5c48d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d5c48d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d5c48d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl
index c204ea6..571646d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d72de9(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d72de9(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d72de9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d72de9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d72de9(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d72de9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d72de9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d72de9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl
index 5c17d90..fc30277 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d7996a(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d7996a(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d7996a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d7996a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d7996a(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d7996a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d7996a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d7996a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl
index 9ace9b4..5600b9f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d79c5c(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_d79c5c(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d79c5c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d79c5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d79c5c(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d79c5c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d79c5c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d79c5c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl
index ab57282..841c754 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d80ff3(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_d80ff3(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d80ff3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d80ff3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d80ff3(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d80ff3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d80ff3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d80ff3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl
index 56043f0..cbe9f6c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d81c57(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_d81c57(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d81c57(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d81c57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d81c57(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d81c57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d81c57(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d81c57(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl
index f90320b..47edbcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d85d61(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_d85d61(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d85d61(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d85d61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d85d61(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d85d61(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d85d61(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d85d61(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl
index d108495..12d9521 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d8617f(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d8617f(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d8617f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d8617f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d8617f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d8617f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d8617f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d8617f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl
index df9e924..0a885f7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d8be5a(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_d8be5a(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d8be5a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d8be5a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d8be5a(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d8be5a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d8be5a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d8be5a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl
index fcf01ad..025aac1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_d91f37(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_d91f37(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_d91f37(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d91f37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d91f37(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_d91f37(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_d91f37(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_d91f37(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl
index 296b91e..0f3070b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_dab04f(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_dab04f(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_dab04f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dab04f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dab04f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dab04f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dab04f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_dab04f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl
index b78178d..08b17b6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_dbd554(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_dbd554(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_dbd554(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dbd554(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dbd554(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dbd554(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dbd554(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_dbd554(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl
index 25e7e80..fa8fa9d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_dd5859(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_dd5859(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_dd5859(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dd5859(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dd5859(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dd5859(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dd5859(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_dd5859(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl
index 52e3ce8..5d3b4cc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_dd8776(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_dd8776(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_dd8776(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dd8776(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dd8776(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dd8776(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dd8776(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_dd8776(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl
index ef93ac6..ecbd7e8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ddeed3(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_ddeed3(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ddeed3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ddeed3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ddeed3(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ddeed3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ddeed3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ddeed3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl
index 407ce56..dd04870 100644
--- a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_de5a0e(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_de5a0e(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_de5a0e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_de5a0e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_de5a0e(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_de5a0e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_de5a0e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_de5a0e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl
index e11e4f8..4ab07b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_dee8e7(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_dee8e7(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_dee8e7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dee8e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dee8e7(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dee8e7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dee8e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_dee8e7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl
index 0fdebf8..2e85bf9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_defd9a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_defd9a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_defd9a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_defd9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_defd9a(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_defd9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_defd9a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_defd9a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl
index 295156c..cb5949f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_dfdf3b(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_dfdf3b(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_dfdf3b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dfdf3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dfdf3b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_dfdf3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_dfdf3b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_dfdf3b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl
index f2a39a1..e798f5a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e1c3cf(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e1c3cf(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e1c3cf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e1c3cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e1c3cf(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e1c3cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e1c3cf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e1c3cf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl
index a7b07e7..a8f2d3d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e2292f(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_e2292f(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e2292f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e2292f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e2292f(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e2292f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e2292f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e2292f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl
index 532ad98..aaa0402 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e2b3a1(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_e2b3a1(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e2b3a1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e2b3a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e2b3a1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e2b3a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e2b3a1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e2b3a1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl
index af49402..8f75f44 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e2d7da(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e2d7da(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e2d7da(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e2d7da(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e2d7da(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e2d7da(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e2d7da(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e2d7da(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl
index c1f24d5..d6a2b3a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e33285(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_e33285(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e33285(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e33285(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e33285(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e33285(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e33285(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e33285(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl
index ebc10c7..9611e8e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e35f72(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_e35f72(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e35f72(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e35f72(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e35f72(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e35f72(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e35f72(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e35f72(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl
index b2dd9c6..c368c3c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e3b08b(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e3b08b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e3b08b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e3b08b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e3b08b(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e3b08b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e3b08b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e3b08b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl
index d303dee..5e5de6b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e3d2cc(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_e3d2cc(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e3d2cc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e3d2cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e3d2cc(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e3d2cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e3d2cc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e3d2cc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl
index 2b7e2dc..9200b16 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e4051a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e4051a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e4051a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e4051a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e4051a(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e4051a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e4051a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e4051a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl
index a629896..ff09c0b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e57e92(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e57e92(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e57e92(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e57e92(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e57e92(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e57e92(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e57e92(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e57e92(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl
index 797b627..2e59488 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e59fdf(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_e59fdf(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e59fdf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e59fdf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e59fdf(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e59fdf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e59fdf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e59fdf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl
index ec632d4..ef154ce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e65916(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_e65916(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e65916(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e65916(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e65916(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e65916(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e65916(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e65916(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl
index cd62929..5c66d2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e893d7(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e893d7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e893d7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e893d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e893d7(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e893d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e893d7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e893d7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl
index 8a6809d..7092934 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e92dd0(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_e92dd0(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e92dd0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e92dd0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e92dd0(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e92dd0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e92dd0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e92dd0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl
index 60008c6..dfee91b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_e9eb65(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_e9eb65(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_e9eb65(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e9eb65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e9eb65(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_e9eb65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_e9eb65(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_e9eb65(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl
index d3819f5..b8c9cba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ea2abd(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_ea2abd(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ea2abd(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ea2abd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ea2abd(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ea2abd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ea2abd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ea2abd(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl
index f7eb810..0e23a6c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_eb573b(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_eb573b(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_eb573b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_eb573b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_eb573b(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_eb573b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_eb573b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_eb573b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl
index 9938300..e027421 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::sample> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ebfb92(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_ebfb92(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ebfb92(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ebfb92(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ebfb92(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ebfb92(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ebfb92(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ebfb92(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl
index 478bb1f..bec1179 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ecc823(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_ecc823(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ecc823(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ecc823(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ecc823(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ecc823(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ecc823(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ecc823(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl
index 70ccf5b..d3694a2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ed55a8(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_ed55a8(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ed55a8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ed55a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ed55a8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ed55a8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ed55a8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ed55a8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl
index 740b11a..26b3d93 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ee33c5(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_ee33c5(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint3(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ee33c5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ee33c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ee33c5(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ee33c5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ee33c5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ee33c5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl
index 258bbc3..ecbc777 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_eecf7d(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_eecf7d(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_eecf7d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_eecf7d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_eecf7d(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_eecf7d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_eecf7d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_eecf7d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl
index 3cd0202..5d1440f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ef2ec3(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_ef2ec3(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ef2ec3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ef2ec3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ef2ec3(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ef2ec3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ef2ec3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ef2ec3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl
index 742495d..1e05b43 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ef5405(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_ef5405(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ef5405(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ef5405(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ef5405(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ef5405(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ef5405(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ef5405(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl
index e9e727a..2a0acc4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_efa787(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_efa787(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_efa787(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_efa787(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_efa787(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_efa787(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_efa787(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_efa787(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl
index ef6ac53..6af2dd8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f0514a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f0514a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f0514a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f0514a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f0514a(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f0514a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f0514a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f0514a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl
index f8f78a0..944370a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f06b69(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_f06b69(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f06b69(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f06b69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f06b69(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f06b69(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f06b69(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f06b69(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl
index eebbb54..0bb2d62 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f0abad(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f0abad(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f0abad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f0abad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f0abad(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f0abad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f0abad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f0abad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl
index e7c42da..3deaaf2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f1c549(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f1c549(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f1c549(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f1c549(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f1c549(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f1c549(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f1c549(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f1c549(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl
index 4220f9d..7288575 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f2a7ff(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f2a7ff(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f2a7ff(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f2a7ff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f2a7ff(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f2a7ff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f2a7ff(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f2a7ff(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl
index f982b20..8be2579 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f2bdd4(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f2bdd4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f2bdd4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f2bdd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f2bdd4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f2bdd4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f2bdd4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f2bdd4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl
index 56f874d..7f76627 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f2c311(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_f2c311(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f2c311(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f2c311(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f2c311(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f2c311(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f2c311(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f2c311(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl
index 546c9b2..ebd42fa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f348d9(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f348d9(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u, 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f348d9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f348d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f348d9(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f348d9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f348d9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f348d9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl
index 2d06635..0415d8b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f35ac7(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_f35ac7(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f35ac7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f35ac7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f35ac7(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f35ac7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f35ac7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f35ac7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl
index f5e67d6..e60b1e5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f379e2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f379e2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f379e2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f379e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f379e2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f379e2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f379e2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f379e2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl
index 6e29819..f410ac7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f56e6f(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_f56e6f(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f56e6f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f56e6f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f56e6f(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f56e6f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f56e6f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f56e6f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl
index f52770b..d4d2e95 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f5aee2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f5aee2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f5aee2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f5aee2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f5aee2(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f5aee2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f5aee2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f5aee2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl
index 82bcda5..97768fb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f5fbc6(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f5fbc6(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f5fbc6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f5fbc6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f5fbc6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f5fbc6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f5fbc6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f5fbc6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl
index 6efcbe4..d858ec6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f74bd8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f74bd8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f74bd8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f74bd8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f74bd8(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f74bd8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f74bd8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f74bd8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl
index 71c9661..d63219e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f7f3bc(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f7f3bc(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f7f3bc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f7f3bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f7f3bc(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f7f3bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f7f3bc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f7f3bc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl
index c0d8ac2..435ed32 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f7f936(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f7f936(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f7f936(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f7f936(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f7f936(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f7f936(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f7f936(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f7f936(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl
index 6002e5c..2a02d57 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f81792(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f81792(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f81792(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f81792(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f81792(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f81792(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f81792(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f81792(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl
index 34146a9..309951a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f82eb2(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f82eb2(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f82eb2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f82eb2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f82eb2(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f82eb2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f82eb2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f82eb2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl
index 33a7ba3..f12b3bb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::sample> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f85291(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_f85291(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f85291(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f85291(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f85291(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f85291(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f85291(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f85291(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl
index 1ff00e5..6d674af 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f8a2e8(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f8a2e8(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f8a2e8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f8a2e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f8a2e8(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f8a2e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f8a2e8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f8a2e8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl
index c9433d8..05a707c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f92c2d(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_f92c2d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(int2(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f92c2d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f92c2d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f92c2d(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f92c2d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f92c2d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f92c2d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl
index 2fb6cf7..9b69c0a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_f9eaaf(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_f9eaaf(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_f9eaaf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f9eaaf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f9eaaf(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_f9eaaf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_f9eaaf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_f9eaaf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl
index 15b2c17..02fe657 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::read_write> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fc47ff(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_fc47ff(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fc47ff(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fc47ff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fc47ff(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fc47ff(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fc47ff(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fc47ff(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl
index d9fe599..69fbbb5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fc6d36(tint_module_vars_struct tint_module_vars) {
+int4 textureLoad_fc6d36(tint_module_vars_struct tint_module_vars) {
   int4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fc6d36(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fc6d36(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fc6d36(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fc6d36(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fc6d36(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fc6d36(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl
index da56392..d4c9852 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_ms<float, access::read> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fcd23d(tint_module_vars_struct tint_module_vars) {
+float textureLoad_fcd23d(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fcd23d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fcd23d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fcd23d(tint_module_vars);
 }
 kernel void compute_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fcd23d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fcd23d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fcd23d(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl
index 95117c3..1f7b4dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fd6442(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_fd6442(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fd6442(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fd6442(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fd6442(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fd6442(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fd6442(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fd6442(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl
index 8d64a4d..951b658 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fd9606(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_fd9606(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fd9606(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fd9606(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fd9606(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fd9606(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fd9606(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fd9606(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl
index 33a81de..398b122 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fdebd0(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_fdebd0(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fdebd0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fdebd0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fdebd0(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fdebd0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fdebd0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fdebd0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl
index d608006..1fcfb39 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<uint, access::read> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fe0565(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_fe0565(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(1u), 1);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fe0565(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fe0565(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fe0565(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fe0565(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fe0565(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fe0565(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl
index 7a1adf5..2e1867f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fe222a(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_fe222a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fe222a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fe222a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fe222a(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fe222a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fe222a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fe222a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl
index c59fcb2..f95b53aa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_fe2c1b(tint_module_vars_struct tint_module_vars) {
+uint4 textureLoad_fe2c1b(tint_module_vars_struct tint_module_vars) {
   uint4 res = tint_module_vars.arg_0.read(uint2(int2(1)), 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_fe2c1b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fe2c1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fe2c1b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_fe2c1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_fe2c1b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_fe2c1b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl
index 1625224..40a2392 100644
--- a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::read> arg_0;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_feab99(tint_module_vars_struct tint_module_vars) {
+float4 textureLoad_feab99(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.read(uint3(int3(1)));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_feab99(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_feab99(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_feab99(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_feab99(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_feab99(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_feab99(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl
index 97148fc..e31b2bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureLoad_ff1119(tint_module_vars_struct tint_module_vars) {
+float textureLoad_ff1119(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.read(uint2(int2(1)), 1, 1u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureLoad_ff1119(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ff1119(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ff1119(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureLoad_ff1119(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureLoad_ff1119(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureLoad_ff1119(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl
index 182657b..10e98b2 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/014a3b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_014a3b(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_014a3b(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_014a3b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_014a3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_014a3b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_014a3b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_014a3b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_014a3b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl
index 97642cd..58c757e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/071ebc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_071ebc(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_071ebc(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_071ebc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_071ebc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_071ebc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_071ebc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_071ebc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_071ebc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl
index 72b1764..980a5b3 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0856ae.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_0856ae(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_0856ae(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_0856ae(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_0856ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_0856ae(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_0856ae(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_0856ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_0856ae(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl
index 493a22d..1f4976a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0ec222.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_0ec222(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_0ec222(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_0ec222(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_0ec222(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_0ec222(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_0ec222(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_0ec222(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_0ec222(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
index 519361e..4044fdf 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/0fe8dc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_0fe8dc(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_0fe8dc(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_0fe8dc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_0fe8dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_0fe8dc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_0fe8dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_0fe8dc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_0fe8dc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl
index 519f539..0311510 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/17ccad.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_17ccad(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_17ccad(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_17ccad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_17ccad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_17ccad(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_17ccad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_17ccad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_17ccad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl
index 12aa510..3f06240 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/1f858a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_1f858a(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_1f858a(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_1f858a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_1f858a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_1f858a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_1f858a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_1f858a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_1f858a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl
index e0b56c0..c6494f6 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/24d572.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_24d572(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_24d572(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_24d572(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_24d572(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_24d572(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_24d572(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_24d572(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_24d572(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl
index eac27b9..47dfeb4 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/26c9f9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_26c9f9(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_26c9f9(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_26c9f9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_26c9f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_26c9f9(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_26c9f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_26c9f9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_26c9f9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl
index 1dd8529..5d8f68c 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/2a48dc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_2a48dc(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_2a48dc(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_2a48dc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_2a48dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_2a48dc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_2a48dc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_2a48dc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_2a48dc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl
index 6f11443..22bc68e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/2d95ea.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_2d95ea(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_2d95ea(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_2d95ea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_2d95ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_2d95ea(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_2d95ea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_2d95ea(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_2d95ea(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl
index 5936a54..db38a92 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/327d70.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_327d70(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_327d70(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_327d70(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_327d70(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_327d70(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_327d70(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_327d70(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_327d70(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl
index bbecf3c..286341a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/32ca10.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_32ca10(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_32ca10(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_32ca10(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_32ca10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_32ca10(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_32ca10(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_32ca10(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_32ca10(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl
index e18979e..7f97580 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3465ec.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_3465ec(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_3465ec(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_3465ec(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3465ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3465ec(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3465ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3465ec(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_3465ec(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl
index e97f01c..3bf6ec9 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/34cefa.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_34cefa(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_34cefa(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_34cefa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_34cefa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_34cefa(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_34cefa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_34cefa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_34cefa(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl
index ff5a3eb..1f05c6c 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3580ab.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_3580ab(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_3580ab(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_3580ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3580ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3580ab(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3580ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3580ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_3580ab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl
index 2844bde..f540109 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/379cc5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_379cc5(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_379cc5(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_379cc5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_379cc5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_379cc5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_379cc5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_379cc5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_379cc5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl
index 4f91ba5..6bf59a1 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/37bc8a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_37bc8a(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_37bc8a(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_37bc8a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_37bc8a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_37bc8a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_37bc8a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_37bc8a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_37bc8a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl
index 6900aa9..e0f8882 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/380a60.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_380a60(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_380a60(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_380a60(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_380a60(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_380a60(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_380a60(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_380a60(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_380a60(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl
index 9f3752b..0974ea7 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3ad143.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_3ad143(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_3ad143(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_3ad143(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3ad143(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3ad143(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3ad143(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3ad143(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_3ad143(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl
index 5e121ba..8f24c19 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/3eff89.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_3eff89(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_3eff89(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_3eff89(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3eff89(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3eff89(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_3eff89(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_3eff89(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_3eff89(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl
index 6e95686..38a57fc 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/485774.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_485774(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_485774(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_485774(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_485774(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_485774(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_485774(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_485774(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_485774(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl
index 552d6e7..aced25b 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/48ef47.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depthcube_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_48ef47(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_48ef47(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_48ef47(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_48ef47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_48ef47(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_48ef47(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_48ef47(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_48ef47(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl
index 69d4484..ae3065b 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/4adaad.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_4adaad(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_4adaad(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_4adaad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_4adaad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_4adaad(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_4adaad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_4adaad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_4adaad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl
index 301d773..470b756 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/4c4333.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_4c4333(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_4c4333(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_4c4333(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_4c4333(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_4c4333(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_4c4333(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_4c4333(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_4c4333(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl
index 4b2489a..ca5b041 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/520086.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_520086(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_520086(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_520086(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_520086(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_520086(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_520086(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_520086(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_520086(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl
index eae37b0..932af63 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/52dfc5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_52dfc5(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_52dfc5(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_52dfc5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_52dfc5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_52dfc5(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_52dfc5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_52dfc5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_52dfc5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl
index f7cdbf9..3561897 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/54a654.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_54a654(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_54a654(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_54a654(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_54a654(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_54a654(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_54a654(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_54a654(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_54a654(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl
index ea0c7db..07b52bc 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/555f67.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_555f67(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_555f67(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_555f67(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_555f67(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_555f67(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_555f67(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_555f67(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_555f67(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl
index 3c6249b..ae77f38 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/59cc27.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_59cc27(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_59cc27(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_59cc27(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_59cc27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_59cc27(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_59cc27(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_59cc27(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_59cc27(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl
index 6be8110..ad29685 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/59eb57.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_59eb57(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_59eb57(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_59eb57(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_59eb57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_59eb57(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_59eb57(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_59eb57(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_59eb57(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
index 9e03b1a..cd59b6e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/5ee8f2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_5ee8f2(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_5ee8f2(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_5ee8f2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_5ee8f2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_5ee8f2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_5ee8f2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_5ee8f2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_5ee8f2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl
index f3286de..be6e54a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/5f20d1.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_5f20d1(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_5f20d1(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_5f20d1(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_5f20d1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_5f20d1(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_5f20d1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_5f20d1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_5f20d1(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl
index f35f7c3..9975071 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/61bd23.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_61bd23(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_61bd23(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_61bd23(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_61bd23(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_61bd23(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_61bd23(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_61bd23(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_61bd23(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl
index 3cae14f..20cfa6f 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/622aa2.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_622aa2(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_622aa2(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_622aa2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_622aa2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_622aa2(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_622aa2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_622aa2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_622aa2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl
index 53badeb..65f2bbd 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/6b4321.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube_array<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_6b4321(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_6b4321(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_6b4321(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_6b4321(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_6b4321(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_6b4321(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_6b4321(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_6b4321(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl
index 591400d..dd4c06d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/6da0eb.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_6da0eb(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_6da0eb(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_6da0eb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_6da0eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_6da0eb(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_6da0eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_6da0eb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_6da0eb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl
index 49fd07f..421a51c 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/77be7b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_77be7b(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_77be7b(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_77be7b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_77be7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_77be7b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_77be7b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_77be7b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_77be7b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl
index a02e363..028dc40 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/7895f4.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_7895f4(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_7895f4(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_7895f4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_7895f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_7895f4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_7895f4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_7895f4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_7895f4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl
index be4a138..b0cff46 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/7f28cf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_7f28cf(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_7f28cf(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_7f28cf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_7f28cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_7f28cf(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_7f28cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_7f28cf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_7f28cf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl
index b22b9fa..dc1962d 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8356f7.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_8356f7(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_8356f7(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_8356f7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8356f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8356f7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8356f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8356f7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_8356f7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl
index 177f3fe..d9903d7 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/878dea.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_878dea(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_878dea(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_878dea(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_878dea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_878dea(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_878dea(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_878dea(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_878dea(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl
index 93e8dfa..236738a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/87faad.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_87faad(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_87faad(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_87faad(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_87faad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_87faad(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_87faad(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_87faad(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_87faad(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl
index 8504efc..b3806ec 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8ac32a.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_8ac32a(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_8ac32a(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_8ac32a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8ac32a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8ac32a(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8ac32a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8ac32a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_8ac32a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl
index f8021fb..4378de1 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8bd987.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_8bd987(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_8bd987(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_8bd987(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8bd987(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8bd987(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8bd987(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8bd987(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_8bd987(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl
index 3212918..9418c1a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8dbf23.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_8dbf23(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_8dbf23(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_8dbf23(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8dbf23(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8dbf23(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8dbf23(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8dbf23(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_8dbf23(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
index 832910c..1dc002e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/8e1bd0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_8e1bd0(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_8e1bd0(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_8e1bd0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8e1bd0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8e1bd0(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_8e1bd0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_8e1bd0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_8e1bd0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl
index 5edd51d..813c20a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/90b8cc.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_90b8cc(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_90b8cc(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_90b8cc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_90b8cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_90b8cc(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_90b8cc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_90b8cc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_90b8cc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl
index ba75bfc..5467da2 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/9695c6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_9695c6(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_9695c6(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_9695c6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_9695c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_9695c6(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_9695c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_9695c6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_9695c6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl
index 3a9e0c7..a7992e5 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/98a9cf.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_98a9cf(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_98a9cf(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_98a9cf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_98a9cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_98a9cf(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_98a9cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_98a9cf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_98a9cf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl
index e503146..f6dba7e 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/9c60e3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_9c60e3(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_9c60e3(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_9c60e3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_9c60e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_9c60e3(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_9c60e3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_9c60e3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_9c60e3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl
index 992b412..a098ba0 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/a54655.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_a54655(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_a54655(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_a54655(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_a54655(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_a54655(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_a54655(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_a54655(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_a54655(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
index 556821b..1b7bff3 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/a9d3f5.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_a9d3f5(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_a9d3f5(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_a9d3f5(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_a9d3f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_a9d3f5(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_a9d3f5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_a9d3f5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_a9d3f5(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl
index 9d54cfe..c3e0d36 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/aac630.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_aac630(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_aac630(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_aac630(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_aac630(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_aac630(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_aac630(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_aac630(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_aac630(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl
index c2ef557..1c059e5 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/bf2f76.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_bf2f76(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_bf2f76(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_bf2f76(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_bf2f76(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_bf2f76(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_bf2f76(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_bf2f76(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_bf2f76(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl
index d5bd2db..4ef6517 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/c1eca9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube_array<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_c1eca9(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_c1eca9(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_c1eca9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_c1eca9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_c1eca9(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_c1eca9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_c1eca9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_c1eca9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl
index 2ebc8d4..71548ef 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d3e21f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_d3e21f(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_d3e21f(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_d3e21f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_d3e21f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_d3e21f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_d3e21f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_d3e21f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_d3e21f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl
index 5ed5cb6..05c1d70 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d3f655.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_d3f655(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_d3f655(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_d3f655(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_d3f655(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_d3f655(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_d3f655(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_d3f655(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_d3f655(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl
index af813b9e..0f5e4f3 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/d75a0b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_d75a0b(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_d75a0b(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_d75a0b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_d75a0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_d75a0b(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_d75a0b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_d75a0b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_d75a0b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl
index 3c6e7cb..d224d4a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/de8087.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_de8087(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_de8087(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_de8087(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_de8087(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_de8087(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_de8087(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_de8087(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_de8087(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl
index 707ff81..4ffe27a 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/e47aac.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read_write> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_e47aac(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_e47aac(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_e47aac(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_e47aac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_e47aac(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_e47aac(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_e47aac(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_e47aac(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl
index 697128e..b9545fa 100644
--- a/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLayers/f1783f.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLayers_f1783f(tint_module_vars_struct tint_module_vars) {
+uint textureNumLayers_f1783f(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_array_size();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLayers_f1783f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_f1783f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_f1783f(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLayers_f1783f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLayers_f1783f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLayers_f1783f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl
index 146e4f7..ef0f495 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/181090.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_181090(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_181090(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_181090(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_181090(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_181090(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_181090(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_181090(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_181090(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
index cbec735..8715828 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/1a3fa9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_1a3fa9(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_1a3fa9(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_1a3fa9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_1a3fa9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_1a3fa9(tint_module_vars);
 }
 kernel void compute_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_1a3fa9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_1a3fa9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_1a3fa9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
index 6f3ceac..b4843fd 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/1a7fc3.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_1a7fc3(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_1a7fc3(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_1a7fc3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_1a7fc3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_1a7fc3(tint_module_vars);
 }
 kernel void compute_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_1a7fc3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_1a7fc3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_1a7fc3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl
index fff04f4..1c73e1a 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/2267d8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_2267d8(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_2267d8(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_2267d8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_2267d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_2267d8(tint_module_vars);
 }
 kernel void compute_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_2267d8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_2267d8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_2267d8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl
index 3298605..9adb42d 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/24b2c6.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_24b2c6(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_24b2c6(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_24b2c6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_24b2c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_24b2c6(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_24b2c6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_24b2c6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_24b2c6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl
index 658d0b5..2156db9 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/2bea6c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depthcube_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_2bea6c(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_2bea6c(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_2bea6c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_2bea6c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_2bea6c(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_2bea6c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_2bea6c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_2bea6c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl
index ffef839..80becaa 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/2df1ab.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_2df1ab(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_2df1ab(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_2df1ab(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_2df1ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_2df1ab(tint_module_vars);
 }
 kernel void compute_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_2df1ab(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_2df1ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_2df1ab(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl
index b688a4d..c0d24d3 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/46dbd8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_46dbd8(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_46dbd8(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_46dbd8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_46dbd8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_46dbd8(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_46dbd8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_46dbd8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_46dbd8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl
index 78fd8bd..2525695 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/60d9b8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_60d9b8(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_60d9b8(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_60d9b8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_60d9b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_60d9b8(tint_module_vars);
 }
 kernel void compute_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_60d9b8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_60d9b8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_60d9b8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl
index f8901ee..e1b5b1b 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/903920.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube_array<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_903920(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_903920(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_903920(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_903920(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_903920(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_903920(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_903920(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_903920(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl
index 4896390..5b1e13f 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/9a1a65.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_9a1a65(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_9a1a65(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_9a1a65(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_9a1a65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_9a1a65(tint_module_vars);
 }
 kernel void compute_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_9a1a65(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_9a1a65(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_9a1a65(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl
index fdc6276..46c865b 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/adc783.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_array<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_adc783(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_adc783(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_adc783(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_adc783(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_adc783(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_adc783(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_adc783(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_adc783(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl
index f766da3..e5d9c72 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/ae911c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_ae911c(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_ae911c(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_ae911c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_ae911c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_ae911c(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_ae911c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_ae911c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_ae911c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl
index add247c..ff55ca0 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/c386c8.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_c386c8(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_c386c8(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_c386c8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_c386c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_c386c8(tint_module_vars);
 }
 kernel void compute_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_c386c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_c386c8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_c386c8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl
index 1292577..bfde352 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/c399f9.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_c399f9(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_c399f9(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_c399f9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_c399f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_c399f9(tint_module_vars);
 }
 kernel void compute_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_c399f9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_c399f9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_c399f9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl
index bdc2dc2..93a709c 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/c8c25c.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depthcube<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_c8c25c(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_c8c25c(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_c8c25c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_c8c25c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_c8c25c(tint_module_vars);
 }
 kernel void compute_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_c8c25c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_c8c25c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_c8c25c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl
index 60c08d1..89822d7 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/d63126.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_d63126(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_d63126(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_d63126(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_d63126(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_d63126(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_d63126(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_d63126(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_d63126(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl
index 8cad080..8271d24 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/d8f73b.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube_array<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_d8f73b(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_d8f73b(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_d8f73b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_d8f73b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_d8f73b(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_d8f73b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_d8f73b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_d8f73b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl
index 57138ba..ff9b69d 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/ef7944.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture3d<float, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_ef7944(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_ef7944(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_ef7944(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_ef7944(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_ef7944(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_ef7944(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_ef7944(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_ef7944(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl
index 575ad08..ce26ddc 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/efd6df.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_efd6df(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_efd6df(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_efd6df(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_efd6df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_efd6df(tint_module_vars);
 }
 kernel void compute_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_efd6df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_efd6df(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_efd6df(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl
index 96dc82a..fb8b0c3 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/f742c0.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture1d<int, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_f742c0(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_f742c0(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_f742c0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_f742c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_f742c0(tint_module_vars);
 }
 kernel void compute_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_f742c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_f742c0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_f742c0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture1d<int, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl
index e8ff625..22f0005 100644
--- a/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumLevels/fe2171.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texturecube_array<uint, access::sample> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumLevels_fe2171(tint_module_vars_struct tint_module_vars) {
+uint textureNumLevels_fe2171(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_mip_levels();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumLevels_fe2171(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_fe2171(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_fe2171(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumLevels_fe2171(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumLevels_fe2171(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumLevels_fe2171(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<uint, access::sample> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl
index ba5fa26..9b6edd9 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/50f399.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<uint, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumSamples_50f399(tint_module_vars_struct tint_module_vars) {
+uint textureNumSamples_50f399(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_samples();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumSamples_50f399(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_50f399(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_50f399(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_50f399(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_50f399(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumSamples_50f399(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<uint, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl
index 02b3bc8..14cd124 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/c1a777.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<int, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumSamples_c1a777(tint_module_vars_struct tint_module_vars) {
+uint textureNumSamples_c1a777(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_samples();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumSamples_c1a777(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_c1a777(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_c1a777(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_c1a777(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_c1a777(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumSamples_c1a777(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<int, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl
index d53d223..94822ef 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/dbb799.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   texture2d_ms<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumSamples_dbb799(tint_module_vars_struct tint_module_vars) {
+uint textureNumSamples_dbb799(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_samples();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumSamples_dbb799(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_dbb799(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_dbb799(tint_module_vars);
 }
 kernel void compute_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_dbb799(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_dbb799(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumSamples_dbb799(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl
index 335eb9e..66d1c16 100644
--- a/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureNumSamples/ecd321.wgsl.expected.ir.msl
@@ -4,27 +4,35 @@
   depth2d_ms<float, access::read> arg_0;
   device uint* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureNumSamples_ecd321(tint_module_vars_struct tint_module_vars) {
+uint textureNumSamples_ecd321(tint_module_vars_struct tint_module_vars) {
   uint res = tint_module_vars.arg_0.get_num_samples();
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureNumSamples_ecd321(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_ecd321(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_ecd321(tint_module_vars);
 }
 kernel void compute_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  textureNumSamples_ecd321(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureNumSamples_ecd321(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]], device uint* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureNumSamples_ecd321(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_ms<float, access::read> arg_0 [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl
index adce6d3..9e99453 100644
--- a/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/0dff6c.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_0dff6c(tint_module_vars_struct tint_module_vars) {
+float textureSample_0dff6c(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_0dff6c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_0dff6c(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl
index 754c9df..a1ad6ba 100644
--- a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_17e988(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_17e988(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_17e988(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_17e988(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl
index 7441785..910bc4c 100644
--- a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_193203(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_193203(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_193203(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_193203(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl
index 4d76dd5..01f4730 100644
--- a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_1a4e1b(tint_module_vars_struct tint_module_vars) {
+float textureSample_1a4e1b(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_1a4e1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_1a4e1b(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl
index fa08bbe..526c6b3 100644
--- a/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/2149ec.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_2149ec(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_2149ec(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), int3(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_2149ec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_2149ec(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl
index f5743b7..5c0857c 100644
--- a/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/38bbb9.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_38bbb9(tint_module_vars_struct tint_module_vars) {
+float textureSample_38bbb9(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_38bbb9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_38bbb9(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl
index bd92d77..7ac088b 100644
--- a/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/3b50bd.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_3b50bd(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_3b50bd(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_3b50bd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_3b50bd(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl
index 83b2790..b35e2ca 100644
--- a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_4703d0(tint_module_vars_struct tint_module_vars) {
+float textureSample_4703d0(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_4703d0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_4703d0(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl
index b7252ad..1603f92 100644
--- a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_4dd1bf(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_4dd1bf(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_4dd1bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_4dd1bf(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl
index 850b230..f4ce109 100644
--- a/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/51b514.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_51b514(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_51b514(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_51b514(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_51b514(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl
index 90a9283..1c1b21b 100644
--- a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_60bf45(tint_module_vars_struct tint_module_vars) {
+float textureSample_60bf45(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_60bf45(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_60bf45(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl
index 34f57aa..b9eadb2 100644
--- a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_6717ca(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_6717ca(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_6717ca(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_6717ca(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl
index 971c6fb..ed6a18b 100644
--- a/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/6e64fb.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_6e64fb(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_6e64fb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture1d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_6e64fb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_6e64fb(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl
index ccd1290..6cc5221 100644
--- a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_7e9ffd(tint_module_vars_struct tint_module_vars) {
+float textureSample_7e9ffd(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_7e9ffd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_7e9ffd(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl
index b24c4de..137a47c 100644
--- a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_7fd8cb(tint_module_vars_struct tint_module_vars) {
+float textureSample_7fd8cb(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_7fd8cb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_7fd8cb(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl
index 38b8474..62904e4 100644
--- a/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/85c4ba.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_85c4ba(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_85c4ba(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_85c4ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_85c4ba(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl
index dfeb0c3..95df45a 100644
--- a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_bc7477(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_bc7477(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_bc7477(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_bc7477(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl
index 5d3648c..49e8a40 100644
--- a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_c2f4e8(tint_module_vars_struct tint_module_vars) {
+float textureSample_c2f4e8(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_c2f4e8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_c2f4e8(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl
index c729426..a14116b 100644
--- a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_d6b281(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_d6b281(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_d6b281(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_d6b281(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl
index 6be1416..40c33f7 100644
--- a/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/e53267.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSample_e53267(tint_module_vars_struct tint_module_vars) {
+float4 textureSample_e53267(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_e53267(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_e53267(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl
index db29db5..fc1d9bb 100644
--- a/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSample/ea7030.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSample_ea7030(tint_module_vars_struct tint_module_vars) {
+float textureSample_ea7030(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSample_ea7030(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSample_ea7030(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
index 10866d7..7b85b9f 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.msl
@@ -33,8 +33,13 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
 float3 tint_GammaCorrection(float3 v, tint_GammaTransferParams params) {
@@ -68,23 +73,26 @@
   }
   return float4(v_13, v_8);
 }
-void textureSampleBaseClampToEdge_7c04e6(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBaseClampToEdge_7c04e6(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_TextureSampleExternal(tint_module_vars.arg_0_plane0, tint_module_vars.arg_0_plane1, (*tint_module_vars.arg_0_params), tint_module_vars.arg_1, float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleBaseClampToEdge_7c04e6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBaseClampToEdge_7c04e6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBaseClampToEdge_7c04e6(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBaseClampToEdge_7c04e6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBaseClampToEdge_7c04e6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleBaseClampToEdge_7c04e6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0_plane0 [[texture(0)]], texture2d<float, access::sample> arg_0_plane1 [[texture(1)]], const constant tint_ExternalTextureParams* arg_0_params [[buffer(2)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0_plane0=arg_0_plane0, .arg_0_plane1=arg_0_plane1, .arg_0_params=arg_0_params, .arg_1=arg_1};
+  VertexOutput const v_14 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_14.pos, .VertexOutput_prevent_dce=v_14.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
index 395fb8c..58aff0c 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.msl
@@ -5,30 +5,38 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleBaseClampToEdge_9ca02c(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBaseClampToEdge_9ca02c(tint_module_vars_struct tint_module_vars) {
   uint const v = tint_module_vars.arg_0.get_width(0u);
   float2 const v_1 = (float2(0.5f) / float2(uint2(v, tint_module_vars.arg_0.get_height(0u))));
   float2 const v_2 = clamp(float2(1.0f), v_1, (float2(1.0f) - v_1));
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, v_2, level(0.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleBaseClampToEdge_9ca02c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBaseClampToEdge_9ca02c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBaseClampToEdge_9ca02c(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBaseClampToEdge_9ca02c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBaseClampToEdge_9ca02c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleBaseClampToEdge_9ca02c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v_3 = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v_3.pos, .VertexOutput_prevent_dce=v_3.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl
index d62193b..6336991 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_1c707e(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_1c707e(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_1c707e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_1c707e(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl
index 837f05e..f60e8b9 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/53b9f7.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_53b9f7(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_53b9f7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_53b9f7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_53b9f7(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl
index f3aa07d..a87f068 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/594824.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_594824(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_594824(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), bias(1.0f), int3(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_594824(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_594824(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl
index 7193277..15fd877 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/6a9113.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_6a9113(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_6a9113(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_6a9113(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_6a9113(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl
index 6fe1871..3aa27fc 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_80e579(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_80e579(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_80e579(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_80e579(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl
index 6de3b5c..d3c9218 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_87915c(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_87915c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, bias(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_87915c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_87915c(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl
index 89d46e6..d842206 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_9dbb51(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_9dbb51(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, bias(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_9dbb51(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_9dbb51(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl
index 716645c..58c9362 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/a161cf.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_a161cf(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_a161cf(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), bias(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_a161cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_a161cf(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl
index 48696bb..77af4e3 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_c6953d(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_c6953d(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1u, bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_c6953d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_c6953d(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
index c80f078..497afea 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/d3fa1b.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_d3fa1b(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_d3fa1b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_d3fa1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_d3fa1b(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl
index f5a0442..9499994 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float4* prevent_dce;
 };
 
-void textureSampleBias_eed7c4(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleBias_eed7c4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1, bias(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleBias_eed7c4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleBias_eed7c4(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl
index 1b9808a..eefbcbf 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_1912e5(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_1912e5(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float3(1.0f), 1u, 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_1912e5(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_1912e5(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl
index cdc4d24..56e79d8 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/3a5923.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_3a5923(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_3a5923(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float2(1.0f), 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_3a5923(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_3a5923(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl
index 33767f6..5a80e6f 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/63fb83.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_63fb83(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_63fb83(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float3(1.0f), 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_63fb83(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_63fb83(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl
index af83eb3..4d8eb43 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_7b5025(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_7b5025(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float2(1.0f), 1u, 1.0f, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_7b5025(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_7b5025(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl
index e8831ee..5718a64 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_90ae56(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_90ae56(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float2(1.0f), 1u, 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_90ae56(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_90ae56(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
index cf01873..559d1db 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_a3ca7e(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_a3ca7e(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float3(1.0f), 1, 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_a3ca7e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_a3ca7e(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl
index b2f094a..171c192 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_af1051(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_af1051(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float2(1.0f), 1, 1.0f, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_af1051(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_af1051(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl
index a677a41..7f1616f 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_dd431d(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_dd431d(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float2(1.0f), 1, 1.0f);
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_dd431d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_dd431d(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl
index 5126e2a..3d1b5a2 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/dec064.wgsl.expected.ir.msl
@@ -6,11 +6,11 @@
   device float* prevent_dce;
 };
 
-void textureSampleCompare_dec064(tint_module_vars_struct tint_module_vars) {
+float textureSampleCompare_dec064(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, float2(1.0f), 1.0f, int2(1));
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleCompare_dec064(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleCompare_dec064(tint_module_vars);
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl
index f5edc65..44ae00c 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_02be59(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_02be59(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), level(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_02be59(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_02be59(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_02be59(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_02be59(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_02be59(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_02be59(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
index 55bed74..a486ad0 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_0b0a1b(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_0b0a1b(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), level(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_0b0a1b(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_0b0a1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_0b0a1b(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_0b0a1b(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_0b0a1b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_0b0a1b(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
index 4e7da23..cf428541 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_0bdd9a(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_0bdd9a(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1, level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_0bdd9a(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_0bdd9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_0bdd9a(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_0bdd9a(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_0bdd9a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_0bdd9a(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl
index 767f8dc..c997420 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_1b0291(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_1b0291(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), level(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_1b0291(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_1b0291(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_1b0291(tint_module_vars);
 }
 kernel void compute_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_1b0291(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_1b0291(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_1b0291(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
index 70e20d2..5c9c5c1 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_1bf73e(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_1bf73e(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, level(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_1bf73e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_1bf73e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_1bf73e(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_1bf73e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_1bf73e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_1bf73e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl
index 0e98f45..fd9bec4 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_265cc7(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_265cc7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_265cc7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_265cc7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_265cc7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_265cc7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_265cc7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_265cc7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl
index 25b07c4..8750f39 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_2974eb(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_2974eb(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, level(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_2974eb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_2974eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_2974eb(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_2974eb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_2974eb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_2974eb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl
index bb4f159..c4cd539 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_302be4(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_302be4(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_302be4(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_302be4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_302be4(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_302be4(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_302be4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_302be4(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl
index 4c738bc..ad36c72 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_36780e(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_36780e(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, level(1), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_36780e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_36780e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_36780e(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_36780e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_36780e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_36780e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
index 5aacf33..b3e0f99 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_36f0d3(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_36f0d3(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, level(1u), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_36f0d3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_36f0d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_36f0d3(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_36f0d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_36f0d3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_36f0d3(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl
index ec3a544..5c33d27 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_3c3442(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_3c3442(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, level(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_3c3442(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_3c3442(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_3c3442(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_3c3442(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_3c3442(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_3c3442(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl
index 1adaab9..13e8e49 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_615583(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_615583(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, level(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_615583(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_615583(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_615583(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_615583(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_615583(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_615583(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl
index 027af86..2134f72 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_73e892(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_73e892(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), level(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_73e892(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_73e892(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_73e892(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_73e892(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_73e892(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_73e892(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl
index 4cc6b03..208fe4e 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_749baf(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_749baf(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), level(1), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_749baf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_749baf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_749baf(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_749baf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_749baf(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_749baf(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl
index 903684e..36bb6df 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_941a53(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_941a53(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1u, level(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_941a53(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_941a53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_941a53(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_941a53(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_941a53(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_941a53(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl
index 7743a9c..5c43cb4 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_a12142(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_a12142(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1, level(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_a12142(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_a12142(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_a12142(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_a12142(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_a12142(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_a12142(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
index ee92ff0..d0af4e0 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_aab3b9(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_aab3b9(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1u, level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_aab3b9(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_aab3b9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_aab3b9(tint_module_vars);
 }
 kernel void compute_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_aab3b9(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_aab3b9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_aab3b9(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
index ca83384..b2bcbcb 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_abfcc0(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_abfcc0(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_abfcc0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_abfcc0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_abfcc0(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_abfcc0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_abfcc0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_abfcc0(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
index d141b60..71e37fb 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_ae5e39(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_ae5e39(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1, level(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_ae5e39(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_ae5e39(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_ae5e39(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_ae5e39(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_ae5e39(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_ae5e39(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
index 92ef72f..6239da7 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_ae92a2(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_ae92a2(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), level(1u));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_ae92a2(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_ae92a2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_ae92a2(tint_module_vars);
 }
 kernel void compute_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_ae92a2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_ae92a2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_ae92a2(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
index 264c19a..eeef826 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_b7c55c(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_b7c55c(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1, level(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_b7c55c(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_b7c55c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_b7c55c(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_b7c55c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_b7c55c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_b7c55c(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl
index d9a07db..1e37fdd 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_c32df7(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_c32df7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_c32df7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texturecube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_c32df7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_c32df7(tint_module_vars);
 }
 kernel void compute_main(texturecube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_c32df7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_c32df7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_c32df7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texturecube<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
index 80af6d7..a47325a 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_c6aca6(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_c6aca6(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), level(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_c6aca6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_c6aca6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_c6aca6(tint_module_vars);
 }
 kernel void compute_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_c6aca6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_c6aca6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_c6aca6(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
index 3606d61..cb73090 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_cdfe0f(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_cdfe0f(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, level(1u), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_cdfe0f(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_cdfe0f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_cdfe0f(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_cdfe0f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_cdfe0f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_cdfe0f(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
index e132cc5..8adb903 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_dcbecb(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_dcbecb(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), level(1.0f), int3(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_dcbecb(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_dcbecb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_dcbecb(tint_module_vars);
 }
 kernel void compute_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_dcbecb(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_dcbecb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_dcbecb(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture3d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
index 300795b..bdc3bef 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_e6ce9e(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_e6ce9e(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, level(1), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_e6ce9e(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_e6ce9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_e6ce9e(tint_module_vars);
 }
 kernel void compute_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_e6ce9e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_e6ce9e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_e6ce9e(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
index 89a1020..61e3a71 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_f3b2c8(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_f3b2c8(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), level(1u), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_f3b2c8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_f3b2c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_f3b2c8(tint_module_vars);
 }
 kernel void compute_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_f3b2c8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_f3b2c8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_f3b2c8(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depth2d<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
index a1dcce3..2bf2425 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_faa6d7(tint_module_vars_struct tint_module_vars) {
+float4 textureSampleLevel_faa6d7(tint_module_vars_struct tint_module_vars) {
   float4 res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float2(1.0f), 1u, level(1.0f), int2(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_faa6d7(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_faa6d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_faa6d7(tint_module_vars);
 }
 kernel void compute_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_faa6d7(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_faa6d7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_faa6d7(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(texture2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
index 692f98b..6a96492 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.msl
@@ -5,27 +5,35 @@
   sampler arg_1;
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void textureSampleLevel_ff11bc(tint_module_vars_struct tint_module_vars) {
+float textureSampleLevel_ff11bc(tint_module_vars_struct tint_module_vars) {
   float res = tint_module_vars.arg_0.sample(tint_module_vars.arg_1, float3(1.0f), 1u, level(1));
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureSampleLevel_ff11bc(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_ff11bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_ff11bc(tint_module_vars);
 }
 kernel void compute_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  textureSampleLevel_ff11bc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = textureSampleLevel_ff11bc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]], device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1, .prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = textureSampleLevel_ff11bc(tint_module_vars);
+  return out;
+}
+vertex vertex_main_outputs vertex_main(depthcube_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0, .arg_1=arg_1};
+  VertexOutput const v = vertex_main_inner(tint_module_vars);
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl
index f2a5a78..8a9f1ca 100644
--- a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_00ca64(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_00ca64(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_00ca64(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_00ca64(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl
index aaf952d..0dd5f6e 100644
--- a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0148bd(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0148bd(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0148bd(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0148bd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl
index 253051fd..2850fe6 100644
--- a/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/031506.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_031506(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_031506(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_031506(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_031506(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl
index a490f98..407c9e6 100644
--- a/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/036d0e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_036d0e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_036d0e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_036d0e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_036d0e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl
index 286fb59..68f7885 100644
--- a/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/03e7a0.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_03e7a0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_03e7a0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_03e7a0(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_03e7a0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl
index a28adee..fbb746a 100644
--- a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_042b06(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_042b06(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_042b06(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_042b06(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl
index 85c63d8..416bb79 100644
--- a/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/052a4e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_052a4e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_052a4e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_052a4e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_052a4e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl
index 11eb6e7..8334841 100644
--- a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_053664(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_053664(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_053664(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_053664(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl
index 326ebfa..028cb3c 100644
--- a/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/05ce15.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_05ce15(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_05ce15(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_05ce15(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_05ce15(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl
index 4589e89..a2c1c26 100644
--- a/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/064c7f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_064c7f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_064c7f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_064c7f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_064c7f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl
index eacb1c8..342f325 100644
--- a/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/068641.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_068641(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_068641(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_068641(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_068641(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl
index 53b5d3e..7723e51 100644
--- a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_06e49c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_06e49c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_06e49c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_06e49c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl
index dabe82c..b5af287 100644
--- a/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/07548b.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_07548b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_07548b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_07548b(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_07548b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl
index aa3ca7e..d2ac2b4 100644
--- a/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/09e4d5.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_09e4d5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_09e4d5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_09e4d5(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_09e4d5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl
index 31656a5..21b06a7 100644
--- a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0a1a79(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0a1a79(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0a1a79(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0a1a79(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl
index d3bccfc..2723fa6 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0ad124.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0ad124(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0ad124(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0ad124(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0ad124(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl
index 24a1832..557e7d5 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0ade9a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0ade9a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0ade9a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0ade9a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl
index dd29f31..57e4f16 100644
--- a/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0af6b5.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0af6b5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0af6b5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0af6b5(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0af6b5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl
index a9451ff..f150a99 100644
--- a/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0c3dff.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0c3dff(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0c3dff(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0c3dff(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0c3dff(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl
index 0e5fde6..4c456f7 100644
--- a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0cc825(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0cc825(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0cc825(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0cc825(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl
index 55870ec..123741e 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_0ff97a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_0ff97a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0ff97a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_0ff97a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl
index ab832a2..c772366 100644
--- a/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/101325.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_101325(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_101325(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_101325(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_101325(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl
index 51ed342..9802d56 100644
--- a/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/102722.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_102722(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_102722(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_102722(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_102722(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl
index 80ed2dd..abcbecb 100644
--- a/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/145061.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_145061(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_145061(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_145061(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_145061(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl
index ad697ea..ae7c17c 100644
--- a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_158cf0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_158cf0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_158cf0(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_158cf0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl
index 097272b..bba3356 100644
--- a/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/178e69.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_178e69(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_178e69(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_178e69(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_178e69(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl
index 16210bf..e3bf368 100644
--- a/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1839f2.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1839f2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1839f2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1839f2(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1839f2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl
index be6f1e5..4d9c1c4 100644
--- a/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/195d1b.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_195d1b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_195d1b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_195d1b(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_195d1b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl
index 6ce4feb..4028d91 100644
--- a/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/197637.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_197637(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_197637(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_197637(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_197637(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl
index e41541a..e8eb6db 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1a264d.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1a264d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1a264d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1a264d(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1a264d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl
index 6f92e15..03ea47a 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1a6c0b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1a6c0b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1a6c0b(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1a6c0b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl
index a2ccfe1..66adfde 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1a7d35(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1a7d35(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1a7d35(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1a7d35(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl
index d82d909..186c8ee 100644
--- a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1af236(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1af236(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1af236(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1af236(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl
index 24b5776..766d4a2 100644
--- a/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1bbd08.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1bbd08(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1bbd08(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1bbd08(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1bbd08(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl
index 700dc43..4ce680a 100644
--- a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1c02e7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1c02e7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1c02e7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1c02e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl
index c4710eb..281761d 100644
--- a/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1dc954.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1dc954(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1dc954(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1dc954(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1dc954(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl
index b48e570..766387f 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1e20f2.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1e20f2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1e20f2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1e20f2(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1e20f2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl
index c998511..bba8e5e 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1e79f0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1e79f0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1e79f0(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1e79f0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl
index 5a88ce3..9084e8f 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1e9fbd(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1e9fbd(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1e9fbd(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1e9fbd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl
index 4923f4a..a870ef3 100644
--- a/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1efc36.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1efc36(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1efc36(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1efc36(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1efc36(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl
index d414289..ecb6350 100644
--- a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1f1ef8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1f1ef8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1f1ef8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1f1ef8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl
index 7fe4eb4..493097f 100644
--- a/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/1fef04.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_1fef04(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_1fef04(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1fef04(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_1fef04(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl
index 51a5eeb..f44cec2 100644
--- a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2046db(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2046db(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2046db(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2046db(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl
index 8dcb40a..cb4676b 100644
--- a/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/207fdd.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_207fdd(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_207fdd(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_207fdd(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_207fdd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl
index 2eeee71..e262fb0 100644
--- a/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2173fd.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2173fd(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2173fd(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2173fd(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2173fd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl
index bfa580b..d3f4e4434 100644
--- a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_22d955(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_22d955(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_22d955(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_22d955(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl
index c7dcd86161..85f72a4 100644
--- a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_22f045(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_22f045(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_22f045(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_22f045(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl
index edd0eac..4d80dbd 100644
--- a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2383fc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2383fc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2383fc(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2383fc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl
index 12062be..89f41de 100644
--- a/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/24e6b7.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_24e6b7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_24e6b7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_24e6b7(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_24e6b7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl
index 808985e..c067ea5 100644
--- a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_258ab0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_258ab0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_258ab0(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_258ab0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl
index 0d9b93e..b910a36 100644
--- a/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/26a26d.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_26a26d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_26a26d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_26a26d(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_26a26d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl
index 03ef719..6cdd9fc 100644
--- a/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/26bf70.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_26bf70(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_26bf70(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_26bf70(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_26bf70(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl
index 784d676..1daf7e8 100644
--- a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_27063a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_27063a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_27063a(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_27063a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl
index 65a699f..7988132 100644
--- a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_272f5a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_272f5a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_272f5a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_272f5a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl
index 54c9e61..1b81054 100644
--- a/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2796b4.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2796b4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2796b4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2796b4(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2796b4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl
index 23c3f0b..2268cf6 100644
--- a/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/285218.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_285218(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_285218(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_285218(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_285218(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl
index 644dd41..1c6ca84 100644
--- a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_28a7ec(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_28a7ec(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_28a7ec(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_28a7ec(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl
index 194c7d6..a62187f 100644
--- a/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/28e109.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_28e109(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_28e109(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_28e109(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_28e109(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl
index a901bfe..357bf26 100644
--- a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2a60c9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2a60c9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2a60c9(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2a60c9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl
index 486026e..a95e59c 100644
--- a/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2ac6c7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2ac6c7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2ac6c7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2ac6c7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2ac6c7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl
index b07b943..f96d6c1 100644
--- a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2addd6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2addd6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2addd6(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2addd6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl
index db81302..4071d5c 100644
--- a/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2c76db.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2c76db(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2c76db(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2c76db(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2c76db(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl
index 4d29405..c598838 100644
--- a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2d2835(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2d2835(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2d2835(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2d2835(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl
index a51b785..acb17c3 100644
--- a/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2e4245.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2e4245(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2e4245(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2e4245(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2e4245(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl
index c92b293..7008d2c 100644
--- a/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2e512f.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2e512f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2e512f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2e512f(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2e512f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl
index b6dd653..c21df63 100644
--- a/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2e6102.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2e6102(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2e6102(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2e6102(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2e6102(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl
index 80574b3..1e55964 100644
--- a/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2eb2a4.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2eb2a4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2eb2a4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2eb2a4(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2eb2a4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl
index 004bd53..ced7326 100644
--- a/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2ed2a3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2ed2a3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2ed2a3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2ed2a3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2ed2a3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl
index 0cdadbb..d06020c 100644
--- a/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/2f29ea.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_2f29ea(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_2f29ea(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2f29ea(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_2f29ea(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl
index afecbf2..a1cfd9a 100644
--- a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_30b0b0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_30b0b0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_30b0b0(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_30b0b0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl
index c199894..4178ede 100644
--- a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_312f27(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_312f27(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_312f27(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_312f27(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl
index 4185bcb..eaf9380 100644
--- a/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/31745b.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_31745b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_31745b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_31745b(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_31745b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl
index a7142b4..e978002 100644
--- a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_319029(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_319029(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_319029(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_319029(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl
index 8ec3c23..2f51be7 100644
--- a/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/32d3d6.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_32d3d6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_32d3d6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_32d3d6(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_32d3d6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl
index 3cb7fdf..47e7ffcf 100644
--- a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_32f368(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_32f368(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_32f368(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_32f368(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl
index f9903a3..ec32303 100644
--- a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_330b7c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_330b7c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_330b7c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_330b7c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl
index 9a27a73..cd7306c 100644
--- a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3310d3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3310d3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3310d3(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3310d3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl
index de3993c..21a2488 100644
--- a/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/331aee.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_331aee(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_331aee(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_331aee(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_331aee(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl
index b8fb3ab..26616e5 100644
--- a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_33cec0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_33cec0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_33cec0(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_33cec0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl
index 2661f8a..0aea7dd 100644
--- a/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/345332.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_345332(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_345332(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_345332(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_345332(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl
index 7090aaa..80a1885 100644
--- a/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_37eeef(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_37eeef(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_37eeef(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_37eeef(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl
index 9b34288..25d7e5b 100644
--- a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_37ffd4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_37ffd4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_37ffd4(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_37ffd4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl
index 0b375e0..51adc0d 100644
--- a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_38e8d7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_38e8d7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_38e8d7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_38e8d7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl
index 1fb5680..d47edc0 100644
--- a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3a52ac(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3a52ac(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3a52ac(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3a52ac(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl
index 738c237..b3ae011 100644
--- a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3bb7a1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3bb7a1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3bb7a1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3bb7a1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl
index 1129b26..13e8bea 100644
--- a/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3bec15.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3bec15(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3bec15(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3bec15(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3bec15(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl
index ec1181f..28678dd 100644
--- a/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3c1937.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3c1937(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3c1937(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3c1937(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3c1937(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl
index 48b58b4..f970cc0 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3d1ebe.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3d1ebe(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3d1ebe(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3d1ebe(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3d1ebe(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl
index af85f79..bf6f006 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3d6f01.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3d6f01(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3d6f01(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3d6f01(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3d6f01(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl
index 3a97b98..39f36df 100644
--- a/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3d96a4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3d96a4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3d96a4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3d96a4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3d96a4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl
index f28c200..c718dc9 100644
--- a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3e0dc4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3e0dc4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3e0dc4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3e0dc4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl
index 6787b3c..8da9376 100644
--- a/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3f61ca.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3f61ca(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3f61ca(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3f61ca(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3f61ca(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl
index ff58bb1..c2edb79 100644
--- a/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/3fb31f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_3fb31f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_3fb31f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3fb31f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_3fb31f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl
index 39410a4..4f61108 100644
--- a/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/40c455.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_40c455(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_40c455(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_40c455(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_40c455(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl
index 35aec49..80298fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4288fc.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4288fc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4288fc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4288fc(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4288fc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl
index 88b04e2..b4a6dc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_43d1df(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_43d1df(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_43d1df(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_43d1df(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl
index d360676..8dcb6dd 100644
--- a/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/441222.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_441222(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_441222(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_441222(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_441222(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl
index f3d9889..c91cc56 100644
--- a/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/441ba8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_441ba8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_441ba8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_441ba8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_441ba8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl
index 6610297..fbdfb6c 100644
--- a/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4483e7.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4483e7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4483e7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4483e7(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4483e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl
index 7dee2c0..492d9d5 100644
--- a/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/44b372.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_44b372(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_44b372(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_44b372(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_44b372(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl
index d6f8292..a301b17 100644
--- a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_44daa7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_44daa7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_44daa7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_44daa7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl
index f52672b..209cf2f 100644
--- a/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/473ead.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_473ead(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_473ead(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_473ead(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_473ead(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl
index e0fdc95..8e09dd5 100644
--- a/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/47bd70.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_47bd70(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_47bd70(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_47bd70(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_47bd70(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl
index 3356ff9..04399d4 100644
--- a/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/486500.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_486500(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_486500(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_486500(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_486500(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl
index e413d02e..7f44d17 100644
--- a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_48cb56(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_48cb56(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_48cb56(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_48cb56(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl
index 5294ed6..3408741 100644
--- a/test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/48eae1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_48eae1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_48eae1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_48eae1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_48eae1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl
index 3835eb5..6cc38eb 100644
--- a/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4bf1fd.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4bf1fd(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4bf1fd(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4bf1fd(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4bf1fd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl
index a1e4d9d..6593b5e 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4c454f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4c454f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4c454f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4c454f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl
index 55b1cf2..6e32243 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4c76b7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4c76b7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4c76b7(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4c76b7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl
index 28b519d..6899078 100644
--- a/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4cce74.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4cce74(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4cce74(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4cce74(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4cce74(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl
index cbc6aee..0cfaa62 100644
--- a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4d359d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4d359d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4d359d(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4d359d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl
index 0c5625d..fa9227e 100644
--- a/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4ddf52.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4ddf52(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4ddf52(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4ddf52(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4ddf52(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl
index 4ca8f33..945deb7 100644
--- a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4e2b3a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4e2b3a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4e2b3a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4e2b3a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl
index 1fec532..e195813 100644
--- a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_4fc057(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_4fc057(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4fc057(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_4fc057(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl
index 81f57f9..76b4959 100644
--- a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5030f5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5030f5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5030f5(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5030f5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl
index b99f149..b098a7f 100644
--- a/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/506a71.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_506a71(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_506a71(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_506a71(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_506a71(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl
index 80c8299..64ce99d 100644
--- a/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/51ec82.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_51ec82(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_51ec82(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_51ec82(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_51ec82(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl
index e9a9569..7034da3 100644
--- a/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5246b4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5246b4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5246b4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5246b4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5246b4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl
index 6126748..7bf8cb6 100644
--- a/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/52f503.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_52f503(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_52f503(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_52f503(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_52f503(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl
index 040de0b..95468fa 100644
--- a/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/53a68b.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_53a68b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_53a68b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_53a68b(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_53a68b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl
index f487f58..dae555c 100644
--- a/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5425ab.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5425ab(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5425ab(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5425ab(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5425ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl
index cedfaf7..acf4a07d 100644
--- a/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/544f06.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_544f06(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_544f06(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_544f06(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_544f06(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl
index 8217dff..f4ba1d2 100644
--- a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_55f9dc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_55f9dc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_55f9dc(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_55f9dc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl
index a6a9114..ae5db01c7 100644
--- a/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/574a31.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_574a31(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_574a31(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_574a31(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_574a31(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl
index 530ac8d..f7eefbd 100644
--- a/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/579b93.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_579b93(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_579b93(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_579b93(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_579b93(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl
index da550e4..2e670da 100644
--- a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5841f8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5841f8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5841f8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5841f8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl
index ae41404..06c3be4 100644
--- a/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/58fc35.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_58fc35(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_58fc35(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_58fc35(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_58fc35(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl
index 6ece35a..d4a0793 100644
--- a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_59a0ab(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_59a0ab(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_59a0ab(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_59a0ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl
index 4de0398..36033c0 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5a2f8f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5a2f8f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5a2f8f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5a2f8f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5a2f8f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl
index 75d0e00..4c03b81 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5a8b41(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5a8b41(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5a8b41(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5a8b41(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl
index 2545833..4ce3e64 100644
--- a/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5b17eb.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5b17eb(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5b17eb(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5b17eb(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5b17eb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl
index 5469b07..1d636d4 100644
--- a/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5b4522.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5b4522(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5b4522(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5b4522(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5b4522(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl
index ce68bf0..1e4a64b 100644
--- a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5bc4f3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5bc4f3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5bc4f3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5bc4f3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl
index 93aa3b2..ebec03c 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5ddc61(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5ddc61(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5ddc61(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5ddc61(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl
index 86af016..eda73ff 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5ec6b2.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5ec6b2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5ec6b2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5ec6b2(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5ec6b2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl
index 19c5aa2..fdf27b6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5ee194(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5ee194(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5ee194(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5ee194(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl
index 48651df..09ce6eb 100644
--- a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_5f9a49(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_5f9a49(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5f9a49(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_5f9a49(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl
index 30cafb1..8f0be0e 100644
--- a/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/602b5a.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_602b5a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_602b5a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_602b5a(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_602b5a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl
index 63d1b71..0c9def6 100644
--- a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_60975f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_60975f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_60975f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_60975f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl
index 33528ec..f8e5e8c 100644
--- a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_614b58(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_614b58(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_614b58(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_614b58(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl
index e55b374..4c8ea38 100644
--- a/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/635584.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_635584(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_635584(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_635584(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_635584(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl
index 70f85d0..f8575a85 100644
--- a/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/63f34a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_63f34a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_63f34a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_63f34a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_63f34a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl
index 395d24f..e316e79 100644
--- a/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/646dbc.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_646dbc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_646dbc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_646dbc(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_646dbc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl
index 1340251..fe8d360 100644
--- a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_658a74(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_658a74(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_658a74(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_658a74(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl
index 2d8aa24..a7b7995 100644
--- a/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/65b6aa.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_65b6aa(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_65b6aa(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_65b6aa(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_65b6aa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl
index ac09169..d48893a 100644
--- a/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/65ba8b.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_65ba8b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_65ba8b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_65ba8b(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_65ba8b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl
index e68fa73..2ac3f15 100644
--- a/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/682fd6.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_682fd6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_682fd6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_682fd6(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_682fd6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl
index 28e0f1a..776b01a 100644
--- a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_699a1b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_699a1b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_699a1b(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_699a1b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl
index 12bf298..293e5d6 100644
--- a/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6b75c3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6b75c3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6b75c3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6b75c3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6b75c3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl
index 2de6976..5b14065 100644
--- a/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6b80d2.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6b80d2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6b80d2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6b80d2(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6b80d2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl
index c6f9a46..f1cff3e 100644
--- a/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6be9e0.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6be9e0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6be9e0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6be9e0(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6be9e0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl
index 0c74fb1..d58f71d 100644
--- a/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6c4a70.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6c4a70(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6c4a70(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6c4a70(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6c4a70(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl
index 27aead8..38280fe 100644
--- a/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6cff2e.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6cff2e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6cff2e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6cff2e(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6cff2e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl
index ffcac17..2ccd254 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6d1809(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6d1809(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6d1809(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6d1809(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl
index 1dfdf86..1b2d466 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6d259f.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6d259f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6d259f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6d259f(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6d259f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl
index 269f994..fbb41c7 100644
--- a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6da692(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6da692(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6da692(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6da692(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl
index 5af5986..73656c5 100644
--- a/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6e6cc0.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6e6cc0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6e6cc0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6e6cc0(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6e6cc0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl
index 10feec7..9b8f149 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6f0c92(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6f0c92(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6f0c92(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6f0c92(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl
index 585efad..096b022 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6f3542.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6f3542(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6f3542(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6f3542(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6f3542(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl
index e4330fe..9a21f44 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6f8642(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6f8642(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6f8642(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6f8642(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl
index 9a6818f..f5e0f56 100644
--- a/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6fb99b.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6fb99b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6fb99b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6fb99b(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6fb99b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl
index c47bb1e..d717c3f 100644
--- a/test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/6fd2b1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_6fd2b1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_6fd2b1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6fd2b1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_6fd2b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl
index 896bc28..6319931 100644
--- a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_704e1f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_704e1f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_704e1f(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_704e1f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl
index 0e8d162..4a6c245 100644
--- a/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/706236.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_706236(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_706236(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_706236(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_706236(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl
index cd121d3..28c9262 100644
--- a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_706560(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_706560(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_706560(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_706560(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl
index d5609a6..dc55846 100644
--- a/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/726472.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_726472(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_726472(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_726472(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_726472(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl
index 0f083e0..4a45fcb 100644
--- a/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/726d6d.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_726d6d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_726d6d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_726d6d(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_726d6d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl
index 3cac01e..2bc3b9b 100644
--- a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_72fa64(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_72fa64(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_72fa64(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_72fa64(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl
index fc06f20..0727f64 100644
--- a/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/731349.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_731349(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_731349(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_731349(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_731349(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl
index 4999cd9..4f3856a 100644
--- a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_73a735(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_73a735(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_73a735(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_73a735(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl
index b28c9c7..f4105b5 100644
--- a/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/73bbbc.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_73bbbc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_73bbbc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_73bbbc(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_73bbbc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl
index 65d5b1c..b2cb384 100644
--- a/test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/74886f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_74886f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_74886f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_74886f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_74886f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl
index 5011dcb..29b8a87 100644
--- a/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/751256.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_751256(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_751256(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_751256(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_751256(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl
index e84ef5f..909d754 100644
--- a/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/752da6.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_752da6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_752da6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_752da6(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_752da6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl
index dbf5047..5c4a446 100644
--- a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_75bbd5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_75bbd5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_75bbd5(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_75bbd5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl
index b3535d3..610edab 100644
--- a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_76affd(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_76affd(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_76affd(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_76affd(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl
index 63afe0d..0764d8a 100644
--- a/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7792fa.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7792fa(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7792fa(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7792fa(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7792fa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl
index 67eadad..f55d302 100644
--- a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_779d14(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_779d14(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_779d14(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_779d14(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl
index de7a0c6..4afaa11 100644
--- a/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/77c0ae.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_77c0ae(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_77c0ae(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_77c0ae(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_77c0ae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl
index 514b152..534d27d 100644
--- a/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7b8f86.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7b8f86(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7b8f86(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7b8f86(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7b8f86(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl
index 1c9d203..edf990a 100644
--- a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7bb211(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7bb211(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7bb211(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7bb211(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl
index fee4640..401f8ca 100644
--- a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7cec8d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7cec8d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7cec8d(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7cec8d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl
index d973445..35a9e3f 100644
--- a/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7cf6e7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7cf6e7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7cf6e7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7cf6e7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7cf6e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl
index 826ad00..db590eb 100644
--- a/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7d10e0.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7d10e0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7d10e0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7d10e0(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7d10e0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl
index c913473..997e2f1 100644
--- a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7dd042(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7dd042(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7dd042(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7dd042(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl
index b9b0f3a..5575d11 100644
--- a/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7e787a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7e787a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7e787a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7e787a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7e787a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl
index a7b7388..b4017d7 100644
--- a/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/7f7fae.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_7f7fae(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_7f7fae(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7f7fae(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_7f7fae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl
index 7dfa795..7caa75e 100644
--- a/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/803a10.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_803a10(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_803a10(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_803a10(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_803a10(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl
index 632c311..a44c266 100644
--- a/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/804942.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_804942(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_804942(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_804942(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_804942(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl
index 0139582..6e5caf1 100644
--- a/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/805dae.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_805dae(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_805dae(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_805dae(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_805dae(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl
index 3a9419d..a1524bb 100644
--- a/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/80bf1d.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_80bf1d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_80bf1d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_80bf1d(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_80bf1d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl
index 9006758..fc9f29f 100644
--- a/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/818df6.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_818df6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_818df6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_818df6(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_818df6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl
index 6dd50b0..73a41ee 100644
--- a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_81ae31(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_81ae31(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_81ae31(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_81ae31(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl
index f41a72e..ecc7831 100644
--- a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_820272(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_820272(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_820272(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_820272(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl
index 2364152..16d9dd8 100644
--- a/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/83bcc1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_83bcc1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_83bcc1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_83bcc1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_83bcc1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl
index 3c5167a..3e5d7b4 100644
--- a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_84d435(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_84d435(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_84d435(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_84d435(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl
index c3be480..e100560 100644
--- a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_84f4f4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_84f4f4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_84f4f4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_84f4f4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl
index 3aad56c..6e2c5ff 100644
--- a/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8676c9.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8676c9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8676c9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8676c9(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8676c9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl
index 9435bb2..04bad90 100644
--- a/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/86f713.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_86f713(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_86f713(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_86f713(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_86f713(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl
index 33d7966..27f5093 100644
--- a/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/872747.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_872747(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_872747(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_872747(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_872747(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl
index 02cee20..8febc33 100644
--- a/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/877c92.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_877c92(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_877c92(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_877c92(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_877c92(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl
index e6c68bd..1d80a97 100644
--- a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8815b1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8815b1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8815b1(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8815b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl
index b89b1ee..78fe1f6 100644
--- a/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/885921.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_885921(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_885921(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_885921(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_885921(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl
index 787309e..ee2bdb4 100644
--- a/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/88ce7e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_88ce7e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_88ce7e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_88ce7e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_88ce7e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl
index f5f1d97..ca917ba 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8a16b0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8a16b0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a16b0(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a16b0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl
index b0bc434..5ea73bc 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a46ff.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8a46ff(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8a46ff(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a46ff(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a46ff(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl
index 2c3a437..8da3d4e 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8a85b9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8a85b9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a85b9(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a85b9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl
index 9e17c67..b3b9f15 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8a8681.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8a8681(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8a8681(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a8681(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8a8681(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl
index 590ed84..cfc765b 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8ae0bc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8ae0bc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ae0bc(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ae0bc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl
index cc2979a..633a995 100644
--- a/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8b9310.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8b9310(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8b9310(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8b9310(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8b9310(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl
index 210cbd6..39a3cee 100644
--- a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8bb287(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8bb287(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8bb287(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8bb287(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl
index 15b868a..559a0db 100644
--- a/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8c76e9.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8c76e9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8c76e9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8c76e9(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8c76e9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl
index e37721e..de9d56b 100644
--- a/test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8cd611.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8cd611(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8cd611(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8cd611(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8cd611(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl
index ff3a067..6ecbe39 100644
--- a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8cd841(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8cd841(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8cd841(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8cd841(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl
index fd03f05..fdf7278 100644
--- a/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8dc54f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8dc54f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8dc54f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8dc54f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8dc54f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl
index 22cd859..59e8e09 100644
--- a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8e0479(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8e0479(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8e0479(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8e0479(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl
index 4be0dfa..16df36b 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8ebdc9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8ebdc9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ebdc9(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ebdc9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl
index 252178f..bf81d4b 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ed9f8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8ed9f8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8ed9f8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ed9f8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ed9f8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl
index dfeecdf..7a05ac7 100644
--- a/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8f71a1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8f71a1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8f71a1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8f71a1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8f71a1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl
index d915e8f..67697b9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_8ff674(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_8ff674(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ff674(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_8ff674(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl
index 277ec0b..728e0a7 100644
--- a/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/90960e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_90960e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_90960e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_90960e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_90960e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl
index dc39cad..79f4330 100644
--- a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_90a553(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_90a553(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_90a553(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_90a553(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl
index 1577a14..0c87e7c 100644
--- a/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/958353.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_958353(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_958353(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_958353(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_958353(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl
index bf0ca3e..f738ac7 100644
--- a/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/959d94.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_959d94(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_959d94(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_959d94(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_959d94(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl
index 675c514..18c4068 100644
--- a/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/95e452.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_95e452(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_95e452(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_95e452(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_95e452(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl
index 09b5743..088cb00 100644
--- a/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/969534.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_969534(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_969534(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_969534(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_969534(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl
index 5f11ce0..fe49d16 100644
--- a/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/976636.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_976636(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_976636(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_976636(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_976636(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl
index a6b19c6..e1c3d24 100644
--- a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9938b7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9938b7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9938b7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9938b7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl
index 4d7abaf..96d015f 100644
--- a/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9a3ecc.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9a3ecc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9a3ecc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9a3ecc(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9a3ecc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl
index e815b86..0dbe5eb 100644
--- a/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9aedd3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9aedd3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9aedd3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9aedd3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9aedd3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl
index 3d9df99..0f12923 100644
--- a/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9ba5c1.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9ba5c1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9ba5c1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9ba5c1(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9ba5c1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl
index 5a52c7a..1008e27 100644
--- a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9cea9e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9cea9e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9cea9e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9cea9e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl
index f03a6ce..3d8a8ae 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9d7c62.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9d7c62(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9d7c62(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9d7c62(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9d7c62(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl
index f29303e..31cac01 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9d8668(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9d8668(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9d8668(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9d8668(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl
index e314753..4d0fd6e 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9d9cd5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9d9cd5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9d9cd5(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9d9cd5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl
index cb7ecbf..08f9b00 100644
--- a/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9e3ec5.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9e3ec5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9e3ec5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9e3ec5(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9e3ec5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl
index 1125d11..3b898db 100644
--- a/test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9e5bc2.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9e5bc2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9e5bc2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9e5bc2(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9e5bc2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl
index 478a70e..074dbd7 100644
--- a/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9f5318.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9f5318(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9f5318(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9f5318(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9f5318(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl
index 8592bac..108dac8 100644
--- a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_9f7cea(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_9f7cea(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9f7cea(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_9f7cea(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl
index ded97fd..1ce2021 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a0022f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a0022f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a0022f(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a0022f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl
index 5b02a72..226ad42 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a0f96e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a0f96e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a0f96e(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a0f96e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl
index f46f333..7b00e62 100644
--- a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a1352c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a1352c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a1352c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a1352c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl
index 93f4d8f..447d2e7 100644
--- a/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a14041.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a14041(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a14041(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a14041(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a14041(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl
index d2fed4e..db377e3 100644
--- a/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a165b8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a165b8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a165b8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a165b8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a165b8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl
index de9c1ce..0e7bcaa 100644
--- a/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a19a12.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a19a12(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a19a12(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a19a12(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a19a12(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl
index 8179043..57c4b0b 100644
--- a/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a24491.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a24491(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a24491(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a24491(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a24491(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl
index 1105c52..554a0a0 100644
--- a/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a4c338.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a4c338(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a4c338(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a4c338(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a4c338(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl
index 9bd6160..079c241 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a5b88e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a5b88e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a5b88e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a5b88e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a5b88e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl
index ab40b70..ce36a70 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a5c925.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a5c925(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a5c925(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a5c925(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a5c925(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl
index be7bb28..00a8ffe 100644
--- a/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a5e80d.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a5e80d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a5e80d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a5e80d(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a5e80d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl
index a917d23..3575a89 100644
--- a/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a66ca4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a66ca4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a66ca4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a66ca4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a66ca4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl
index fc6e5a6..8b588d5 100644
--- a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a6a986(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a6a986(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a6a986(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a6a986(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl
index 4177035..bd207eb 100644
--- a/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a6e78f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a6e78f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a6e78f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a6e78f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a6e78f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl
index 8c5db72..2a63787 100644
--- a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a702b6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a702b6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a702b6(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a702b6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl
index d8713e8..dda5539 100644
--- a/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a7fc47.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a7fc47(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a7fc47(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a7fc47(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a7fc47(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl
index 00920c4..92ce340 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a9298c.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a9298c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a9298c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a9298c(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a9298c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl
index 5d070c1..3e58d59 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_a9426c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_a9426c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a9426c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_a9426c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl
index 80756e5..8bac04d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ab03b6.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ab03b6(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ab03b6(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ab03b6(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ab03b6(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl
index 11dbe7a..8e2c03d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ab788e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ab788e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ab788e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ab788e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ab788e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl
index 38f07ee..90ced53 100644
--- a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_abdd21(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_abdd21(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_abdd21(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_abdd21(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl
index c397874..7bf985b 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ac0a55(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ac0a55(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ac0a55(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ac0a55(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl
index b811f13..b0ecfc3 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ac67aa.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ac67aa(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ac67aa(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ac67aa(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ac67aa(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl
index 2ccd301..5c413ce 100644
--- a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ae6a2a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ae6a2a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ae6a2a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ae6a2a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl
index 9dea5e3..8687f1c 100644
--- a/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/aeb38a.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_aeb38a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_aeb38a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_aeb38a(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_aeb38a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl
index aa7728e..9a5596c 100644
--- a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_aedea3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_aedea3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_aedea3(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_aedea3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl
index 4c10448..db58101 100644
--- a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b16110(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b16110(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b16110(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b16110(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl
index 5c722b0..5d6b851 100644
--- a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b286b4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b286b4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b286b4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b286b4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl
index 252231c..b2af995 100644
--- a/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b36bc1.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b36bc1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b36bc1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b36bc1(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b36bc1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl
index 5ccde89..55e40c2 100644
--- a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b42fd3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b42fd3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b42fd3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b42fd3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl
index 29d85b2..2309b38 100644
--- a/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b4389e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b4389e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b4389e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b4389e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b4389e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl
index a8e7a99..6b3f860e 100644
--- a/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b706b1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b706b1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b706b1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b706b1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b706b1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl
index 46f065f..51b8839 100644
--- a/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b70ded.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b70ded(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b70ded(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b70ded(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b70ded(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl
index dd7abeb..cb5c9bc 100644
--- a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b71c13(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b71c13(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b71c13(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b71c13(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl
index e49cbbd..25c80a1 100644
--- a/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b7232c.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b7232c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b7232c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b7232c(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b7232c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl
index 48f10f6..e883504 100644
--- a/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b76ff3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b76ff3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b76ff3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b76ff3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b76ff3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl
index 3c5432b..96e817e 100644
--- a/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b77161.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b77161(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b77161(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b77161(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b77161(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl
index f8788c8..07e9d4a 100644
--- a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b89ffb(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b89ffb(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b89ffb(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b89ffb(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl
index 11cf8f2..675c270 100644
--- a/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b91b86(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b91b86(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b91b86(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b91b86(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl
index 26ee0ce..25c4866 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b9c81a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b9c81a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b9c81a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b9c81a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b9c81a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl
index 819ee64..5a27db5 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_b9d863(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_b9d863(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b9d863(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_b9d863(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl
index 0216838..0dc8752 100644
--- a/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bbcb7f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_bbcb7f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_bbcb7f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bbcb7f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bbcb7f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl
index 27deb82..4a3bb8b 100644
--- a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_bc1423(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_bc1423(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bc1423(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bc1423(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl
index 70324df..4aeeaef 100644
--- a/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bcc97a.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_bcc97a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_bcc97a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bcc97a(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bcc97a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl
index 2ac7e10..a3684ae 100644
--- a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_bd6602(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_bd6602(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bd6602(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bd6602(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl
index 143bb4e..0269d72 100644
--- a/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/be6e30.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_be6e30(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_be6e30(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_be6e30(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_be6e30(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl
index 34f8672..53d4e76 100644
--- a/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bedbfc.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_bedbfc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_bedbfc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bedbfc(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bedbfc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl
index 76c66d9..dadf39f 100644
--- a/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/bf775c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_bf775c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_bf775c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bf775c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_bf775c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl
index fdf8a34..daaf1d1 100644
--- a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c06463(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c06463(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c06463(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c06463(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl
index b233bdc..98b3bce 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c1c664.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c1c664(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c1c664(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c1c664(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c1c664(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl
index 7e0c2c4..e804c00 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c1f29e.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c1f29e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c1f29e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c1f29e(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c1f29e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl
index 404b9ab..54637e8 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c1f760(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c1f760(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c1f760(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c1f760(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl
index 5095f14..198eb62 100644
--- a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c2ca46(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c2ca46(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c2ca46(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c2ca46(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl
index 2f7e9cb..01256ef 100644
--- a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c32905(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c32905(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c32905(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c32905(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl
index 94bcc47..eeeba93 100644
--- a/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c33478.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c33478(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c33478(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c33478(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c33478(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl
index b57bc82..fdad9b1 100644
--- a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c35268(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c35268(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c35268(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c35268(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl
index 23d7d30..37bd1de 100644
--- a/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c5af1e.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c5af1e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c5af1e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c5af1e(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c5af1e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl
index 81f4ff1..b0438eb 100644
--- a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c63f05(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c63f05(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c63f05(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c63f05(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl
index d644bf6..e48eb9a 100644
--- a/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c79451.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c79451(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c79451(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c79451(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c79451(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl
index acff77b..0a29d06 100644
--- a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c863be(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c863be(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c863be(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c863be(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl
index aeebdf7..2c6eb40 100644
--- a/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/c9d780.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_c9d780(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_c9d780(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c9d780(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_c9d780(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl
index 79bd513..8f97f56 100644
--- a/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/cb3b0b.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_cb3b0b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_cb3b0b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_cb3b0b(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_cb3b0b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl
index 21a5546..78a9b9b 100644
--- a/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ccac20.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ccac20(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ccac20(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ccac20(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ccac20(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl
index ee18ddb..ddb2890 100644
--- a/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/cd6755.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_cd6755(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_cd6755(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_cd6755(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_cd6755(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl
index 372c2be..88fb132 100644
--- a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ceb832(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ceb832(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ceb832(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ceb832(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl
index f4b4dae..f571cc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d0d62c.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d0d62c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d0d62c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d0d62c(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d0d62c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl
index ba82353..26204fe 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d0fadc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d0fadc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d0fadc(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d0fadc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl
index 631eaef..ad24346 100644
--- a/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d19db4.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d19db4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d19db4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d19db4(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d19db4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl
index 18ac934..84ec122 100644
--- a/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d1ab82.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d1ab82(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d1ab82(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d1ab82(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d1ab82(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl
index 710e932..fe3f25d 100644
--- a/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d26166.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d26166(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d26166(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d26166(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d26166(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl
index f23ae07..ab3de4c 100644
--- a/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d2b565.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d2b565(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d2b565(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d2b565(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d2b565(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl
index 90ed330..9a5916a 100644
--- a/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d3a22b.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d3a22b(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d3a22b(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d3a22b(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d3a22b(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl
index 282b0d7..b9d32d1 100644
--- a/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d4aa95.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d4aa95(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d4aa95(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d4aa95(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d4aa95(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl
index 34514d6..65d3c67 100644
--- a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d55e65(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d55e65(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d55e65(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d55e65(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl
index bb4f03e..fd78bc9 100644
--- a/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d73b5c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d73b5c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d73b5c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d73b5c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d73b5c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl
index 68097ca..5e68e1c 100644
--- a/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d82b0a.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d82b0a(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d82b0a(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d82b0a(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d82b0a(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl
index 0f4cd66..1320ed7 100644
--- a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_d86d33(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_d86d33(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d86d33(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_d86d33(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl
index 20a5d16..b5afb13 100644
--- a/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/da530c.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_da530c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_da530c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_da530c(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_da530c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl
index c9c87e8..4552bd8 100644
--- a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_db5128(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_db5128(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_db5128(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_db5128(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl
index 051eb9c..1e5c616 100644
--- a/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/db92a2.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_db92a2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_db92a2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_db92a2(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_db92a2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl
index cf99a73..188fc1e 100644
--- a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_dce0e2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_dce0e2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dce0e2(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dce0e2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl
index 02a6ceb..1068e84 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dd7d81.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_dd7d81(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_dd7d81(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dd7d81(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dd7d81(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl
index f079be2..d55d1e0 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_dd8b29(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_dd8b29(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dd8b29(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dd8b29(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl
index 69e2a29..c3bd1c4 100644
--- a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_dde364(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_dde364(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dde364(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dde364(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl
index 620e24c..570781f 100644
--- a/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/de38e5.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_de38e5(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_de38e5(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_de38e5(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_de38e5(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl
index 2a2387f..4a1d0ab 100644
--- a/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/de4b94.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_de4b94(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_de4b94(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_de4b94(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_de4b94(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl
index df3bba1..cacb8de 100644
--- a/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/df0c51.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_df0c51(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_df0c51(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_df0c51(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_df0c51(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl
index 9126cd7..dd22f81 100644
--- a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_df2ca4(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_df2ca4(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_df2ca4(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_df2ca4(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl
index 3eeccd0..d981e81 100644
--- a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_dfa9a1(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_dfa9a1(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dfa9a1(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dfa9a1(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl
index 668e6b0..1c1f337 100644
--- a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_dffb13(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_dffb13(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dffb13(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_dffb13(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl
index 8f5554b..3d9161a 100644
--- a/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e077e7.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e077e7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e077e7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e077e7(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e077e7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl
index 0c6fb070..aa0b39d 100644
--- a/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e0b666.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e0b666(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e0b666(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e0b666(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e0b666(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl
index 335a568..3dc267e 100644
--- a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e1784d(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e1784d(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e1784d(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e1784d(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl
index f9c6f09..4a2ba84 100644
--- a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e38281(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e38281(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e38281(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e38281(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl
index 165aa69..3d2bee4 100644
--- a/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e46fd8.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e46fd8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e46fd8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e46fd8(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e46fd8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl
index b0029d9..9aade8f 100644
--- a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e72bdc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e72bdc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e72bdc(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e72bdc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl
index 5ff4c12..4ef21c1 100644
--- a/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e7c6d8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e7c6d8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e7c6d8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e7c6d8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e7c6d8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl
index 6f69074..5e8da83 100644
--- a/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e87f6e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e87f6e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e87f6e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e87f6e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e87f6e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl
index 40a3f8e..d49d1a9 100644
--- a/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e885e8.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e885e8(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e885e8(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e885e8(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e885e8(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl
index 85f5282..b0e2ccf 100644
--- a/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/e8cbf7.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_e8cbf7(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_e8cbf7(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e8cbf7(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_e8cbf7(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl
index d83ddf6..0691c67 100644
--- a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ea30d2(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ea30d2(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ea30d2(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ea30d2(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl
index 5ba4604..f906208 100644
--- a/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/eb702f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_eb702f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_eb702f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_eb702f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_eb702f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl
index 42237d3..0777ff1 100644
--- a/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/eb78b9.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_eb78b9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_eb78b9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_eb78b9(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_eb78b9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl
index c77a5dc..5fa112d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ed6198.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture3d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ed6198(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ed6198(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ed6198(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ed6198(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl
index b2686f5..a6591c0 100644
--- a/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ee6acc.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ee6acc(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ee6acc(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ee6acc(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ee6acc(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl
index 099b568..cb50e5c 100644
--- a/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ef9f2f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ef9f2f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ef9f2f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ef9f2f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ef9f2f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl
index e6478f3..9f54fed 100644
--- a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f05928(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1u);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f05928(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f05928(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f05928(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl
index 2e0f295..2246f6b 100644
--- a/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f1e6d3.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f1e6d3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f1e6d3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f1e6d3(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f1e6d3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl
index bb78c6b..c37ad90 100644
--- a/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f64d69.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f64d69(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f64d69(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f64d69(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f64d69(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl
index f2ff675..9f27783 100644
--- a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f6f392(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f6f392(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f6f392(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f6f392(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl
index 12afb61..837d8dc 100644
--- a/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f7b0ab(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(1u), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f7b0ab(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f7b0ab(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f7b0ab(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl
index 6bdfd06..be37e79 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f8aaf9(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f8aaf9(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f8aaf9(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f8aaf9(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl
index 7035708..ca754be 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f8dead.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f8dead(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint3(int3(1)));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f8dead(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f8dead(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f8dead(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl
index 949c3fe..ee54045 100644
--- a/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f975a0.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d<float, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f975a0(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint2(int2(1)));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f975a0(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f975a0(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f975a0(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d<float, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl
index b2245e1..7110c8e 100644
--- a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_f9be83(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_f9be83(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f9be83(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_f9be83(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl
index c808eac..7311979 100644
--- a/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fb9a8f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_fb9a8f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_fb9a8f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fb9a8f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fb9a8f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl
index c284231..545c46e 100644
--- a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<int, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_fbf53f(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(int4(1), uint2(int2(1)), 1);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_fbf53f(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fbf53f(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fbf53f(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<int, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl
index 8fa222f..66a5158 100644
--- a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_fc916e(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(1u), 1);
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_fc916e(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fc916e(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fc916e(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl
index 6b66abc..c145134 100644
--- a/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fcbe66.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture3d<float, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_fcbe66(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(float4(1.0f), uint3(1u));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_fcbe66(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fcbe66(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fcbe66(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture3d<float, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl
index 530d045..6d4325c 100644
--- a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.msl
@@ -3,17 +3,10 @@
 struct tint_module_vars_struct {
   texture2d_array<uint, access::write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_fd350c(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint2(int2(1)), 1u);
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_fd350c(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fd350c(tint_module_vars);
@@ -22,7 +15,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_fd350c(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture2d_array<uint, access::write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl
index e776716..10ddc62 100644
--- a/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/textureStore/ff23b3.wgsl.expected.ir.msl
@@ -3,18 +3,11 @@
 struct tint_module_vars_struct {
   texture1d<uint, access::read_write> arg_0;
 };
-struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
-};
 
 void textureStore_ff23b3(tint_module_vars_struct tint_module_vars) {
   tint_module_vars.arg_0.write(uint4(1u), uint(1));
   tint_module_vars.arg_0.fence();
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  textureStore_ff23b3(tint_module_vars);
-  return float4(0.0f);
-}
 fragment void fragment_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ff23b3(tint_module_vars);
@@ -23,7 +16,3 @@
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
   textureStore_ff23b3(tint_module_vars);
 }
-vertex vertex_main_outputs vertex_main(texture1d<uint, access::read_write> arg_0 [[texture(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
-}
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl
index 44fd708..426a02c 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.ir.msl
@@ -1,34 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half3x3* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tint_store_and_preserve_padding(device half3x3* const target, half3x3 value_param) {
-  (*target)[0u] = value_param[0u];
-  (*target)[1u] = value_param[1u];
-  (*target)[2u] = value_param[2u];
-}
-void transpose_06794e(tint_module_vars_struct tint_module_vars) {
+int transpose_06794e() {
   half3x3 res = half3x3(half3(1.0h), half3(1.0h), half3(1.0h));
-  tint_store_and_preserve_padding(tint_module_vars.prevent_dce, res);
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_06794e(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half3x3* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_06794e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_06794e();
 }
-kernel void compute_main(device half3x3* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_06794e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_06794e();
 }
-vertex vertex_main_outputs vertex_main(device half3x3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_06794e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl
index 7f6c6de..7c10e3c 100644
--- a/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/2585cd.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float3x4* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_2585cd(tint_module_vars_struct tint_module_vars) {
+int transpose_2585cd() {
   float3x4 res = float3x4(float4(1.0f), float4(1.0f), float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_2585cd(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float3x4* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_2585cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_2585cd();
 }
-kernel void compute_main(device float3x4* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_2585cd(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_2585cd();
 }
-vertex vertex_main_outputs vertex_main(device float3x4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_2585cd();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl
index d85e1f7..ab7535f 100644
--- a/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/31d679.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float2x2* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_31d679(tint_module_vars_struct tint_module_vars) {
+int transpose_31d679() {
   float2x2 res = float2x2(float2(1.0f), float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_31d679(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float2x2* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_31d679(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_31d679();
 }
-kernel void compute_main(device float2x2* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_31d679(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_31d679();
 }
-vertex vertex_main_outputs vertex_main(device float2x2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_31d679();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl
index 3fb5261..30e3e1f 100644
--- a/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/31e37e.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float2x4* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_31e37e(tint_module_vars_struct tint_module_vars) {
+int transpose_31e37e() {
   float2x4 res = float2x4(float4(1.0f), float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_31e37e(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float2x4* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_31e37e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_31e37e();
 }
-kernel void compute_main(device float2x4* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_31e37e(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_31e37e();
 }
-vertex vertex_main_outputs vertex_main(device float2x4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_31e37e();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/32dd64.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/32dd64.wgsl.expected.ir.msl
index cc7cda5..d9954774 100644
--- a/test/tint/builtins/gen/literal/transpose/32dd64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/32dd64.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_32dd64() {
   float4x3 res = float4x3(float3(1.0f), float3(1.0f), float3(1.0f), float3(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_32dd64();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_32dd64();
 }
 kernel void compute_main() {
   transpose_32dd64();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_32dd64();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl
index 65f671a..c1f4d7f 100644
--- a/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/4ce359.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float4x2* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_4ce359(tint_module_vars_struct tint_module_vars) {
+int transpose_4ce359() {
   float4x2 res = float4x2(float2(1.0f), float2(1.0f), float2(1.0f), float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_4ce359(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float4x2* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_4ce359(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_4ce359();
 }
-kernel void compute_main(device float4x2* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_4ce359(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_4ce359();
 }
-vertex vertex_main_outputs vertex_main(device float4x2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_4ce359();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl
index 3306cb2..0adab54 100644
--- a/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/4dc9a1.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float3x2* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_4dc9a1(tint_module_vars_struct tint_module_vars) {
+int transpose_4dc9a1() {
   float3x2 res = float3x2(float2(1.0f), float2(1.0f), float2(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_4dc9a1(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float3x2* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_4dc9a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_4dc9a1();
 }
-kernel void compute_main(device float3x2* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_4dc9a1(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_4dc9a1();
 }
-vertex vertex_main_outputs vertex_main(device float3x2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_4dc9a1();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/553e90.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/553e90.wgsl.expected.ir.msl
index f553147..d8da2de 100644
--- a/test/tint/builtins/gen/literal/transpose/553e90.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/553e90.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_553e90() {
   float2x4 res = float2x4(float4(1.0f), float4(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_553e90();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_553e90();
 }
 kernel void compute_main() {
   transpose_553e90();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_553e90();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/5c133c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/5c133c.wgsl.expected.ir.msl
index 3b03aa2..45bc965 100644
--- a/test/tint/builtins/gen/literal/transpose/5c133c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/5c133c.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_5c133c() {
   float3x4 res = float3x4(float4(1.0f), float4(1.0f), float4(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_5c133c();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_5c133c();
 }
 kernel void compute_main() {
   transpose_5c133c();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_5c133c();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl
index 8f2ea7a..14b8047 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half2x4* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_5edd96(tint_module_vars_struct tint_module_vars) {
+int transpose_5edd96() {
   half2x4 res = half2x4(half4(1.0h), half4(1.0h));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_5edd96(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half2x4* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_5edd96(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_5edd96();
 }
-kernel void compute_main(device half2x4* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_5edd96(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_5edd96();
 }
-vertex vertex_main_outputs vertex_main(device half2x4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_5edd96();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl
index f9c9373..9a700a4 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half3x4* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_5f36bf(tint_module_vars_struct tint_module_vars) {
+int transpose_5f36bf() {
   half3x4 res = half3x4(half4(1.0h), half4(1.0h), half4(1.0h));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_5f36bf(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half3x4* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_5f36bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_5f36bf();
 }
-kernel void compute_main(device half3x4* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_5f36bf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_5f36bf();
 }
-vertex vertex_main_outputs vertex_main(device half3x4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_5f36bf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/66fce8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/66fce8.wgsl.expected.ir.msl
index 4eba7c5..ed8e6dd 100644
--- a/test/tint/builtins/gen/literal/transpose/66fce8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/66fce8.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_66fce8() {
   float3x3 res = float3x3(float3(1.0f), float3(1.0f), float3(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_66fce8();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_66fce8();
 }
 kernel void compute_main() {
   transpose_66fce8();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_66fce8();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/70ca11.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/70ca11.wgsl.expected.ir.msl
index 1980ca8..598065b 100644
--- a/test/tint/builtins/gen/literal/transpose/70ca11.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/70ca11.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_70ca11() {
   float3x2 res = float3x2(float2(1.0f), float2(1.0f), float2(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_70ca11();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_70ca11();
 }
 kernel void compute_main() {
   transpose_70ca11();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_70ca11();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl
index 2284c17..160d3bd 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half2x2* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_7be8b2(tint_module_vars_struct tint_module_vars) {
+int transpose_7be8b2() {
   half2x2 res = half2x2(half2(1.0h), half2(1.0h));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_7be8b2(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half2x2* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_7be8b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_7be8b2();
 }
-kernel void compute_main(device half2x2* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_7be8b2(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_7be8b2();
 }
-vertex vertex_main_outputs vertex_main(device half2x2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_7be8b2();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/7eb2c5.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/7eb2c5.wgsl.expected.ir.msl
index a0cf7be..6bb7f87 100644
--- a/test/tint/builtins/gen/literal/transpose/7eb2c5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/7eb2c5.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_7eb2c5() {
   float2x2 res = float2x2(float2(1.0f), float2(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_7eb2c5();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_7eb2c5();
 }
 kernel void compute_main() {
   transpose_7eb2c5();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_7eb2c5();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl
index c93c29f..825e5a6 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half4x4* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_844869(tint_module_vars_struct tint_module_vars) {
+int transpose_844869() {
   half4x4 res = half4x4(half4(1.0h), half4(1.0h), half4(1.0h), half4(1.0h));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_844869(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half4x4* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_844869(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_844869();
 }
-kernel void compute_main(device half4x4* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_844869(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_844869();
 }
-vertex vertex_main_outputs vertex_main(device half4x4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_844869();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/84a763.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/84a763.wgsl.expected.ir.msl
index ed131f3..d4d4b57 100644
--- a/test/tint/builtins/gen/literal/transpose/84a763.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/84a763.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_84a763() {
   float4x2 res = float4x2(float2(1.0f), float2(1.0f), float2(1.0f), float2(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_84a763();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_84a763();
 }
 kernel void compute_main() {
   transpose_84a763();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_84a763();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl
index 038f0e9..4829277 100644
--- a/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/854336.wgsl.expected.ir.msl
@@ -1,34 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float3x3* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tint_store_and_preserve_padding(device float3x3* const target, float3x3 value_param) {
-  (*target)[0u] = value_param[0u];
-  (*target)[1u] = value_param[1u];
-  (*target)[2u] = value_param[2u];
-}
-void transpose_854336(tint_module_vars_struct tint_module_vars) {
+int transpose_854336() {
   float3x3 res = float3x3(float3(1.0f), float3(1.0f), float3(1.0f));
-  tint_store_and_preserve_padding(tint_module_vars.prevent_dce, res);
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_854336(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float3x3* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_854336(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_854336();
 }
-kernel void compute_main(device float3x3* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_854336(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_854336();
 }
-vertex vertex_main_outputs vertex_main(device float3x3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_854336();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl
index 23918df..4141b1f 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.ir.msl
@@ -1,35 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half4x3* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tint_store_and_preserve_padding(device half4x3* const target, half4x3 value_param) {
-  (*target)[0u] = value_param[0u];
-  (*target)[1u] = value_param[1u];
-  (*target)[2u] = value_param[2u];
-  (*target)[3u] = value_param[3u];
-}
-void transpose_8c06ce(tint_module_vars_struct tint_module_vars) {
+int transpose_8c06ce() {
   half4x3 res = half4x3(half3(1.0h), half3(1.0h), half3(1.0h), half3(1.0h));
-  tint_store_and_preserve_padding(tint_module_vars.prevent_dce, res);
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_8c06ce(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half4x3* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_8c06ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_8c06ce();
 }
-kernel void compute_main(device half4x3* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_8c06ce(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_8c06ce();
 }
-vertex vertex_main_outputs vertex_main(device half4x3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_8c06ce();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/ace596.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/ace596.wgsl.expected.ir.msl
index 8743eb7..c092b18 100644
--- a/test/tint/builtins/gen/literal/transpose/ace596.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/ace596.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_ace596() {
   float2x3 res = float2x3(float3(1.0f), float3(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_ace596();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_ace596();
 }
 kernel void compute_main() {
   transpose_ace596();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_ace596();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl
index 6a2c244..f1974b9 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.ir.msl
@@ -1,33 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half2x3* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tint_store_and_preserve_padding(device half2x3* const target, half2x3 value_param) {
-  (*target)[0u] = value_param[0u];
-  (*target)[1u] = value_param[1u];
-}
-void transpose_b9ad1f(tint_module_vars_struct tint_module_vars) {
+int transpose_b9ad1f() {
   half2x3 res = half2x3(half3(1.0h), half3(1.0h));
-  tint_store_and_preserve_padding(tint_module_vars.prevent_dce, res);
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_b9ad1f(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half2x3* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_b9ad1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_b9ad1f();
 }
-kernel void compute_main(device half2x3* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_b9ad1f(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_b9ad1f();
 }
-vertex vertex_main_outputs vertex_main(device half2x3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_b9ad1f();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl
index d9c75b1..6a33bae 100644
--- a/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/c1b600.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float4x4* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_c1b600(tint_module_vars_struct tint_module_vars) {
+int transpose_c1b600() {
   float4x4 res = float4x4(float4(1.0f), float4(1.0f), float4(1.0f), float4(1.0f));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_c1b600(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float4x4* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_c1b600(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_c1b600();
 }
-kernel void compute_main(device float4x4* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_c1b600(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_c1b600();
 }
-vertex vertex_main_outputs vertex_main(device float4x4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_c1b600();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl
index 5532056..a24c507 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half3x2* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_d6faec(tint_module_vars_struct tint_module_vars) {
+int transpose_d6faec() {
   half3x2 res = half3x2(half2(1.0h), half2(1.0h), half2(1.0h));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_d6faec(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half3x2* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_d6faec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_d6faec();
 }
-kernel void compute_main(device half3x2* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_d6faec(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_d6faec();
 }
-vertex vertex_main_outputs vertex_main(device half3x2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_d6faec();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl
index 1d82e04..b6a73bf 100644
--- a/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/d8f8ba.wgsl.expected.ir.msl
@@ -1,35 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float4x3* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tint_store_and_preserve_padding(device float4x3* const target, float4x3 value_param) {
-  (*target)[0u] = value_param[0u];
-  (*target)[1u] = value_param[1u];
-  (*target)[2u] = value_param[2u];
-  (*target)[3u] = value_param[3u];
-}
-void transpose_d8f8ba(tint_module_vars_struct tint_module_vars) {
+int transpose_d8f8ba() {
   float4x3 res = float4x3(float3(1.0f), float3(1.0f), float3(1.0f), float3(1.0f));
-  tint_store_and_preserve_padding(tint_module_vars.prevent_dce, res);
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_d8f8ba(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float4x3* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_d8f8ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_d8f8ba();
 }
-kernel void compute_main(device float4x3* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_d8f8ba(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_d8f8ba();
 }
-vertex vertex_main_outputs vertex_main(device float4x3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_d8f8ba();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/dc671a.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/dc671a.wgsl.expected.ir.msl
index 5e1e3bb..b86a759 100644
--- a/test/tint/builtins/gen/literal/transpose/dc671a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/dc671a.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void transpose_dc671a() {
   float4x4 res = float4x4(float4(1.0f), float4(1.0f), float4(1.0f), float4(1.0f));
 }
-float4 vertex_main_inner() {
-  transpose_dc671a();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   transpose_dc671a();
 }
 kernel void compute_main() {
   transpose_dc671a();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  transpose_dc671a();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl
index d1151e4..21179a5 100644
--- a/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/ed4bdc.wgsl.expected.ir.msl
@@ -1,33 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device float2x3* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void tint_store_and_preserve_padding(device float2x3* const target, float2x3 value_param) {
-  (*target)[0u] = value_param[0u];
-  (*target)[1u] = value_param[1u];
-}
-void transpose_ed4bdc(tint_module_vars_struct tint_module_vars) {
+int transpose_ed4bdc() {
   float2x3 res = float2x3(float3(1.0f), float3(1.0f));
-  tint_store_and_preserve_padding(tint_module_vars.prevent_dce, res);
+  return select(0, 1, (res[0][0] == 0.0f));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_ed4bdc(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device float2x3* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_ed4bdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_ed4bdc();
 }
-kernel void compute_main(device float2x3* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_ed4bdc(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_ed4bdc();
 }
-vertex vertex_main_outputs vertex_main(device float2x3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_ed4bdc();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl
index 16d76bc..efe2fb9 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.ir.msl
@@ -1,29 +1,36 @@
 #include <metal_stdlib>
 using namespace metal;
 struct tint_module_vars_struct {
-  device half4x2* prevent_dce;
+  device int* prevent_dce;
+};
+struct VertexOutput {
+  float4 pos;
+  int prevent_dce;
 };
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void transpose_faeb05(tint_module_vars_struct tint_module_vars) {
+int transpose_faeb05() {
   half4x2 res = half4x2(half2(1.0h), half2(1.0h), half2(1.0h), half2(1.0h));
-  (*tint_module_vars.prevent_dce) = res;
+  return select(0, 1, (res[0][0] == 0.0h));
 }
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  transpose_faeb05(tint_module_vars);
-  return float4(0.0f);
-}
-fragment void fragment_main(device half4x2* prevent_dce [[buffer(0)]]) {
+fragment void fragment_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_faeb05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_faeb05();
 }
-kernel void compute_main(device half4x2* prevent_dce [[buffer(0)]]) {
+kernel void compute_main(device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  transpose_faeb05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = transpose_faeb05();
 }
-vertex vertex_main_outputs vertex_main(device half4x2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = transpose_faeb05();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl
index ded1887..90c98b4 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_103ab8(tint_module_vars_struct tint_module_vars) {
+half3 trunc_103ab8() {
   half3 res = half3(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_103ab8(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_103ab8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_103ab8();
 }
 kernel void compute_main(device half3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_103ab8(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_103ab8();
 }
-vertex vertex_main_outputs vertex_main(device half3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_103ab8();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/117396.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/117396.wgsl.expected.ir.msl
index cf6a07e..22df103 100644
--- a/test/tint/builtins/gen/literal/trunc/117396.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/117396.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void trunc_117396() {
   float3 res = float3(1.0f);
 }
-float4 vertex_main_inner() {
-  trunc_117396();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   trunc_117396();
 }
 kernel void compute_main() {
   trunc_117396();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  trunc_117396();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl
index da5b788..5fd9554 100644
--- a/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/562d05.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float3* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float3 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float3 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_562d05(tint_module_vars_struct tint_module_vars) {
+float3 trunc_562d05() {
   float3 res = float3(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_562d05(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_562d05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_562d05();
 }
 kernel void compute_main(device float3* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_562d05(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_562d05();
 }
-vertex vertex_main_outputs vertex_main(device float3* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_562d05();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/7d6ded.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/7d6ded.wgsl.expected.ir.msl
index 69afce8..581f9b1 100644
--- a/test/tint/builtins/gen/literal/trunc/7d6ded.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/7d6ded.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void trunc_7d6ded() {
   float res = 1.0f;
 }
-float4 vertex_main_inner() {
-  trunc_7d6ded();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   trunc_7d6ded();
 }
 kernel void compute_main() {
   trunc_7d6ded();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  trunc_7d6ded();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl
index 76f4ef2..1e777c2 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_a56109(tint_module_vars_struct tint_module_vars) {
+half2 trunc_a56109() {
   half2 res = half2(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_a56109(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_a56109(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_a56109();
 }
 kernel void compute_main(device half2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_a56109(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_a56109();
 }
-vertex vertex_main_outputs vertex_main(device half2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_a56109();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/c12555.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/c12555.wgsl.expected.ir.msl
index 49e1aaf..e6ee3d0 100644
--- a/test/tint/builtins/gen/literal/trunc/c12555.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/c12555.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void trunc_c12555() {
   float2 res = float2(1.0f);
 }
-float4 vertex_main_inner() {
-  trunc_c12555();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   trunc_c12555();
 }
 kernel void compute_main() {
   trunc_c12555();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  trunc_c12555();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl
index 3f9f10c..979cee1 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_cc2b0d(tint_module_vars_struct tint_module_vars) {
+half trunc_cc2b0d() {
   half res = 1.0h;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_cc2b0d(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_cc2b0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_cc2b0d();
 }
 kernel void compute_main(device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_cc2b0d(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_cc2b0d();
 }
-vertex vertex_main_outputs vertex_main(device half* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_cc2b0d();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl
index 3314b5d..20ab2bb 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device half4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  half4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  half4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_ce7c17(tint_module_vars_struct tint_module_vars) {
+half4 trunc_ce7c17() {
   half4 res = half4(1.0h);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_ce7c17(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_ce7c17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_ce7c17();
 }
 kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_ce7c17(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_ce7c17();
 }
-vertex vertex_main_outputs vertex_main(device half4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_ce7c17();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl
index b11be4e..6ca7bc2 100644
--- a/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/e183aa.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_e183aa(tint_module_vars_struct tint_module_vars) {
+float4 trunc_e183aa() {
   float4 res = float4(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_e183aa(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_e183aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_e183aa();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_e183aa(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_e183aa();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_e183aa();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl
index 8fce7f1..b785758 100644
--- a/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/eb83df.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_eb83df(tint_module_vars_struct tint_module_vars) {
+float trunc_eb83df() {
   float res = 1.0f;
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_eb83df(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_eb83df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_eb83df();
 }
 kernel void compute_main(device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_eb83df(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_eb83df();
 }
-vertex vertex_main_outputs vertex_main(device float* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_eb83df();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/f0f1a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/f0f1a1.wgsl.expected.ir.msl
index 557eb31..07c41c4 100644
--- a/test/tint/builtins/gen/literal/trunc/f0f1a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/f0f1a1.wgsl.expected.ir.msl
@@ -1,22 +1,27 @@
 #include <metal_stdlib>
 using namespace metal;
+struct VertexOutput {
+  float4 pos;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
 };
 
 void trunc_f0f1a1() {
   float4 res = float4(1.0f);
 }
-float4 vertex_main_inner() {
-  trunc_f0f1a1();
-  return float4(0.0f);
-}
 fragment void fragment_main() {
   trunc_f0f1a1();
 }
 kernel void compute_main() {
   trunc_f0f1a1();
 }
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  trunc_f0f1a1();
+  return out;
+}
 vertex vertex_main_outputs vertex_main() {
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
+  return vertex_main_outputs{.VertexOutput_pos=vertex_main_inner().pos};
 }
diff --git a/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl
index 3ee7e56..eab05ea 100644
--- a/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/trunc/f370d3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void trunc_f370d3(tint_module_vars_struct tint_module_vars) {
+float2 trunc_f370d3() {
   float2 res = float2(1.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  trunc_f370d3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_f370d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_f370d3();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  trunc_f370d3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = trunc_f370d3();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = trunc_f370d3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl
index f25b3c4..8d80ace 100644
--- a/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack2x16float/32a5cf.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack2x16float_32a5cf(tint_module_vars_struct tint_module_vars) {
+float2 unpack2x16float_32a5cf() {
   float2 res = float2(0.00000005960464477539f, 0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack2x16float_32a5cf(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack2x16float_32a5cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack2x16float_32a5cf();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack2x16float_32a5cf(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack2x16float_32a5cf();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack2x16float_32a5cf();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
index d1bef9d..2b9c307 100644
--- a/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack2x16snorm/b4aea6.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack2x16snorm_b4aea6(tint_module_vars_struct tint_module_vars) {
+float2 unpack2x16snorm_b4aea6() {
   float2 res = float2(0.00003051850944757462f, 0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack2x16snorm_b4aea6(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack2x16snorm_b4aea6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack2x16snorm_b4aea6();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack2x16snorm_b4aea6(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack2x16snorm_b4aea6();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack2x16snorm_b4aea6();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
index a3bdbfb..6010ac6 100644
--- a/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack2x16unorm/7699c0.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float2* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float2 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float2 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack2x16unorm_7699c0(tint_module_vars_struct tint_module_vars) {
+float2 unpack2x16unorm_7699c0() {
   float2 res = float2(0.00001525902189314365f, 0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack2x16unorm_7699c0(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack2x16unorm_7699c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack2x16unorm_7699c0();
 }
 kernel void compute_main(device float2* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack2x16unorm_7699c0(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack2x16unorm_7699c0();
 }
-vertex vertex_main_outputs vertex_main(device float2* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack2x16unorm_7699c0();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
index f8889d9..64c17be 100644
--- a/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack4x8snorm/523fb3.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack4x8snorm_523fb3(tint_module_vars_struct tint_module_vars) {
+float4 unpack4x8snorm_523fb3() {
   float4 res = float4(0.00787401571869850159f, 0.0f, 0.0f, 0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack4x8snorm_523fb3(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4x8snorm_523fb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4x8snorm_523fb3();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4x8snorm_523fb3(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4x8snorm_523fb3();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack4x8snorm_523fb3();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl
index c1e1f41..93b85ec 100644
--- a/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack4x8unorm/750c74.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device float4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  float4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  float4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack4x8unorm_750c74(tint_module_vars_struct tint_module_vars) {
+float4 unpack4x8unorm_750c74() {
   float4 res = float4(0.0039215688593685627f, 0.0f, 0.0f, 0.0f);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack4x8unorm_750c74(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4x8unorm_750c74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4x8unorm_750c74();
 }
 kernel void compute_main(device float4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4x8unorm_750c74(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4x8unorm_750c74();
 }
-vertex vertex_main_outputs vertex_main(device float4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack4x8unorm_750c74();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl
index 6663d31..237b78a 100644
--- a/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack4xI8/830900.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device int4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  int4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  int4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack4xI8_830900(tint_module_vars_struct tint_module_vars) {
+int4 unpack4xI8_830900() {
   int4 res = int4(1, 0, 0, 0);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack4xI8_830900(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4xI8_830900(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4xI8_830900();
 }
 kernel void compute_main(device int4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4xI8_830900(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4xI8_830900();
 }
-vertex vertex_main_outputs vertex_main(device int4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack4xI8_830900();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl
index 4cf0035..f6dc52b 100644
--- a/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/unpack4xU8/a5ea55.wgsl.expected.ir.msl
@@ -3,27 +3,34 @@
 struct tint_module_vars_struct {
   device uint4* prevent_dce;
 };
+struct VertexOutput {
+  float4 pos;
+  uint4 prevent_dce;
+};
 struct vertex_main_outputs {
-  float4 tint_symbol [[position]];
+  float4 VertexOutput_pos [[position]];
+  uint4 VertexOutput_prevent_dce [[user(locn0)]] [[flat]];
 };
 
-void unpack4xU8_a5ea55(tint_module_vars_struct tint_module_vars) {
+uint4 unpack4xU8_a5ea55() {
   uint4 res = uint4(1u, 0u, 0u, 0u);
-  (*tint_module_vars.prevent_dce) = res;
-}
-float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
-  unpack4xU8_a5ea55(tint_module_vars);
-  return float4(0.0f);
+  return res;
 }
 fragment void fragment_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4xU8_a5ea55(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4xU8_a5ea55();
 }
 kernel void compute_main(device uint4* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  unpack4xU8_a5ea55(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = unpack4xU8_a5ea55();
 }
-vertex vertex_main_outputs vertex_main(device uint4* prevent_dce [[buffer(0)]]) {
-  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
-  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+VertexOutput vertex_main_inner() {
+  VertexOutput out = {};
+  out.pos = float4(0.0f);
+  out.prevent_dce = unpack4xU8_a5ea55();
+  return out;
+}
+vertex vertex_main_outputs vertex_main() {
+  VertexOutput const v = vertex_main_inner();
+  return vertex_main_outputs{.VertexOutput_pos=v.pos, .VertexOutput_prevent_dce=v.prevent_dce};
 }
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
index 83d8d9b..c656f77 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/37307c.wgsl.expected.ir.msl
@@ -8,19 +8,19 @@
   uint tint_symbol;
 };
 
-void workgroupUniformLoad_37307c(tint_module_vars_struct tint_module_vars) {
+uint workgroupUniformLoad_37307c(tint_module_vars_struct tint_module_vars) {
   threadgroup_barrier(mem_flags::mem_threadgroup);
   uint const v = (*tint_module_vars.arg_0);
   threadgroup_barrier(mem_flags::mem_threadgroup);
   uint res = v;
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     (*tint_module_vars.arg_0) = 0u;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  workgroupUniformLoad_37307c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = workgroupUniformLoad_37307c(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v_1 [[threadgroup(0)]], device uint* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v_1).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
index d8a9f7a..c45ad4b 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/7a857c.wgsl.expected.ir.msl
@@ -8,19 +8,19 @@
   float tint_symbol;
 };
 
-void workgroupUniformLoad_7a857c(tint_module_vars_struct tint_module_vars) {
+float workgroupUniformLoad_7a857c(tint_module_vars_struct tint_module_vars) {
   threadgroup_barrier(mem_flags::mem_threadgroup);
   float const v = (*tint_module_vars.arg_0);
   threadgroup_barrier(mem_flags::mem_threadgroup);
   float res = v;
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     (*tint_module_vars.arg_0) = 0.0f;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  workgroupUniformLoad_7a857c(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = workgroupUniformLoad_7a857c(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v_1 [[threadgroup(0)]], device float* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v_1).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
index 248acb8..9d4d28f 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/9d33de.wgsl.expected.ir.msl
@@ -8,19 +8,19 @@
   int tint_symbol;
 };
 
-void workgroupUniformLoad_9d33de(tint_module_vars_struct tint_module_vars) {
+int workgroupUniformLoad_9d33de(tint_module_vars_struct tint_module_vars) {
   threadgroup_barrier(mem_flags::mem_threadgroup);
   int const v = (*tint_module_vars.arg_0);
   threadgroup_barrier(mem_flags::mem_threadgroup);
   int res = v;
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     (*tint_module_vars.arg_0) = 0;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  workgroupUniformLoad_9d33de(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = workgroupUniformLoad_9d33de(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v_1 [[threadgroup(0)]], device int* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v_1).tint_symbol), .prevent_dce=prevent_dce};
diff --git a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
index 8eabaf9..f39d9a3 100644
--- a/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/literal/workgroupUniformLoad/e07d08.wgsl.expected.ir.msl
@@ -8,19 +8,19 @@
   half tint_symbol;
 };
 
-void workgroupUniformLoad_e07d08(tint_module_vars_struct tint_module_vars) {
+half workgroupUniformLoad_e07d08(tint_module_vars_struct tint_module_vars) {
   threadgroup_barrier(mem_flags::mem_threadgroup);
   half const v = (*tint_module_vars.arg_0);
   threadgroup_barrier(mem_flags::mem_threadgroup);
   half res = v;
-  (*tint_module_vars.prevent_dce) = res;
+  return res;
 }
 void compute_main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
   if ((tint_local_index == 0u)) {
     (*tint_module_vars.arg_0) = 0.0h;
   }
   threadgroup_barrier(mem_flags::mem_threadgroup);
-  workgroupUniformLoad_e07d08(tint_module_vars);
+  (*tint_module_vars.prevent_dce) = workgroupUniformLoad_e07d08(tint_module_vars);
 }
 kernel void compute_main(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v_1 [[threadgroup(0)]], device half* prevent_dce [[buffer(0)]]) {
   tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=(&(*v_1).tint_symbol), .prevent_dce=prevent_dce};
