[msl] Regenerate E2E expectations

Recent changes to the builtin template file change many test outputs.

Bug: 42251016
No-Try: true
Change-Id: Ie6f740c5cbe403352272c06f1ecf2259c9818c40
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/193660
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
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};