[msl] Add polyfill for textureStore()

Insert a fence after texture writes to read-write storage textures to
ensure correct memory ordering.

Add MSL member function definitions for `write()` and `fence()`.

Bug: 42251016
Change-Id: I59436da345e7940c1f4d898c8fb646ad1c559c7b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/192944
Reviewed-by: dan sinclair <dsinclair@chromium.org>
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 877ebc6..f2a5a78 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..aaf952d 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 bbe33ef..253051fd 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_031506 = func():void {
-  $B2: {
-    %3:texture_storage_2d<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_031506(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_031506
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_031506
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_031506
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 8eec2f9..a490f98 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_036d0e = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_036d0e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_036d0e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_036d0e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_036d0e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 bc30d0d..286fb59 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_03e7a0 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_03e7a0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_03e7a0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_03e7a0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_03e7a0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 3172261..a28adee 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_042b06 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_042b06(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_042b06
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_042b06
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_042b06
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 1f5e66c..85c63d8 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_052a4e = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_052a4e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_052a4e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_052a4e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_052a4e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 5a7e50a..11eb6e7 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_053664 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_053664(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_053664
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_053664
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_053664
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..326ebfa 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..4589e89 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..eacb1c8 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..53b5d3e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..dabe82c 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 211abf2..aa3ca7e 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_09e4d5 = func():void {
-  $B2: {
-    %3:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_09e4d5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_09e4d5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_09e4d5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_09e4d5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..31656a5 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 818c31f..d3bccfc 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_0ad124 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_0ad124(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_0ad124
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_0ad124
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_0ad124
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 a04feb9..24a1832 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_0ade9a = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_0ade9a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_0ade9a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_0ade9a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_0ade9a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..dd29f31 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..a9451ff 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..0e5fde6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 2877d6d..55870ec 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_0ff97a = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_0ff97a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_0ff97a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_0ff97a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_0ff97a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 34a713c..ab832a2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_101325 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_101325(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_101325
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_101325
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_101325
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..51ed342 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0404fd8..80ed2dd 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_145061 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_145061(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_145061
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_145061
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_145061
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..ad697ea 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 e5f72bf..097272b 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_178e69 = func():void {
-  $B2: {
-    %3:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_178e69(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_178e69
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_178e69
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_178e69
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..16210bf 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 942b4cb..be6f1e5 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_195d1b = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_195d1b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_195d1b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_195d1b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_195d1b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 0934c57..6ce4feb 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_197637 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_197637(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_197637
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_197637
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_197637
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..e41541a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 bd8673c..6f92e15 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_1a6c0b = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1a6c0b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_1a6c0b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_1a6c0b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_1a6c0b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..a2ccfe1 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0266535..d82d909 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_1af236 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1af236(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_1af236
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_1af236
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_1af236
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..24b5776 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..700dc43 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..c4710eb 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..b48e570 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..c998511 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 9353add..5a88ce3 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_1e9fbd = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1e9fbd(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_1e9fbd
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_1e9fbd
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_1e9fbd
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..4923f4a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..d414289 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 693f553..7fe4eb4 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_1fef04 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1fef04(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_1fef04
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_1fef04
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_1fef04
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 07fa7a6..51a5eeb 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2046db = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2046db(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2046db
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2046db
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2046db
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..8dcb40a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 645ab03..2eeee71 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2173fd = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2173fd(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2173fd
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2173fd
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2173fd
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..bfa580b 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..c7dcd86161 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..edd0eac 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 8b73497..12062be 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_24e6b7 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_24e6b7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_24e6b7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_24e6b7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_24e6b7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..808985e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 228bd7c..0d9b93e 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_26a26d = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_26a26d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_26a26d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_26a26d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_26a26d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..03ef719 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..784d676 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 7f54cc5..65a699f 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_272f5a = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_272f5a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_272f5a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_272f5a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_272f5a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..54c9e61 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..23c3f0b 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..644dd41 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 b1ce0d9..194c7d6 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_28e109 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_28e109(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_28e109
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_28e109
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_28e109
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 fdec6c9..a901bfe 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2a60c9 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2a60c9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2a60c9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2a60c9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2a60c9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..486026e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 82b6db3..b07b943 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2addd6 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2addd6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2addd6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2addd6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2addd6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 847edd3..db81302 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2c76db = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2c76db(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2c76db
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2c76db
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2c76db
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..4d29405 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..a51b785 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 87b746f..c92b293 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2e512f = func():void {
-  $B2: {
-    %3:texture_storage_2d<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2e512f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2e512f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2e512f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2e512f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b6dd653 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..80574b3 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..004bd53 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 757a9f5..0cdadbb 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_2f29ea = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2f29ea(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_2f29ea
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_2f29ea
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_2f29ea
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..afecbf2 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 477aa39..c199894 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_312f27 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_312f27(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_312f27
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_312f27
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_312f27
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..4185bcb 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..a7142b4 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 7813a9d..8ec3c23 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_32d3d6 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_32d3d6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_32d3d6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_32d3d6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_32d3d6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..3cb7fdf 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..f9903a3 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 b5ff31e..9a27a73 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_3310d3 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3310d3(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_3310d3
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_3310d3
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_3310d3
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..de3993c 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..b8fb3ab 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 5393bfd..2661f8a 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_345332 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_345332(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_345332
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_345332
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_345332
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..7090aaa 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..9b34288 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..0b375e0 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..1fb5680 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..738c237 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..1129b26 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..ec1181f 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 6858e00..48b58b4 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_3d1ebe = func():void {
-  $B2: {
-    %3:texture_storage_2d<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3d1ebe(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_3d1ebe
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_3d1ebe
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_3d1ebe
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..af85f79 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 6f074c1..3a97b98 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_3d96a4 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3d96a4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_3d96a4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_3d96a4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_3d96a4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 bc9a5c1..f28c200 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_3e0dc4 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3e0dc4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_3e0dc4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_3e0dc4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_3e0dc4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 ff0ae1b..6787b3c 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_3f61ca = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3f61ca(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_3f61ca
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_3f61ca
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_3f61ca
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..ff58bb1 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..39410a4 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..35aec49 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 b852d69..88b04e2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_43d1df = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_43d1df(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_43d1df
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_43d1df
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_43d1df
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 44b3828..d360676 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_441222 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_441222(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_441222
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_441222
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_441222
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..f3d9889 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 1658b1e..6610297 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_4483e7 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4483e7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_4483e7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_4483e7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_4483e7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 c958470..7dee2c0 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_44b372 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_44b372(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_44b372
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_44b372
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_44b372
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..d6f8292 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 9ba0477..f52672b 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_473ead = func():void {
-  $B2: {
-    %3:texture_storage_3d<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_473ead(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_473ead
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_473ead
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_473ead
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 5be639f..e0fdc95 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_47bd70 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_47bd70(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_47bd70
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_47bd70
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_47bd70
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..3356ff9 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 25f9a8d..e413d02e 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_48cb56 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_48cb56(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_48cb56
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_48cb56
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_48cb56
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5294ed6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0239fee..3835eb5 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_4bf1fd = func():void {
-  $B2: {
-    %3:texture_storage_2d<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4bf1fd(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_4bf1fd
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_4bf1fd
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_4bf1fd
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..a1e4d9d 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 c18392f..55b1cf2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_4c76b7 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4c76b7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_4c76b7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_4c76b7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_4c76b7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 61f3b4c..28b519d 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_4cce74 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4cce74(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_4cce74
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_4cce74
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_4cce74
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..cbc6aee 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 6c09869..0c5625d 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_4ddf52 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4ddf52(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_4ddf52
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_4ddf52
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_4ddf52
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 3ce2f27..4ca8f33 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_4e2b3a = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4e2b3a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_4e2b3a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_4e2b3a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_4e2b3a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..1fec532 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 85929e5..81f57f9 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5030f5 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5030f5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5030f5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5030f5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5030f5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b99f149 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 3ad0935..80c8299 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_51ec82 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_51ec82(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_51ec82
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_51ec82
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_51ec82
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 32ce08a..e9a9569 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5246b4 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5246b4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5246b4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5246b4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5246b4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..6126748 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 d84ecd0..040de0b 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_53a68b = func():void {
-  $B2: {
-    %3:texture_storage_3d<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_53a68b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_53a68b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_53a68b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_53a68b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 05ca46d..f487f58 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5425ab = func():void {
-  $B2: {
-    %3:texture_storage_2d<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5425ab(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5425ab
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5425ab
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5425ab
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 8936663..cedfaf7 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_544f06 = func():void {
-  $B2: {
-    %3:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_544f06(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_544f06
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_544f06
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_544f06
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 80d5b8e..8217dff 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_55f9dc = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_55f9dc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_55f9dc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_55f9dc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_55f9dc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 83cf013..a6a9114 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_574a31 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_574a31(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_574a31
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_574a31
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_574a31
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 f2070ba..530ac8d 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_579b93 = func():void {
-  $B2: {
-    %3:texture_storage_2d<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_579b93(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_579b93
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_579b93
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_579b93
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..da550e4 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 375e6e4..ae41404 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_58fc35 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_58fc35(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_58fc35
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_58fc35
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_58fc35
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..6ece35a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..4de0398 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 4632423..75d0e00 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5a8b41 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5a8b41(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5a8b41
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5a8b41
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5a8b41
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 3c604d0..2545833 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5b17eb = func():void {
-  $B2: {
-    %3:texture_storage_2d<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5b17eb(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5b17eb
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5b17eb
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5b17eb
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 fc2a5a7..5469b07 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5b4522 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5b4522(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5b4522
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5b4522
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5b4522
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..ce68bf0 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..93aa3b2 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 59a8df5..86af016 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5ec6b2 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5ec6b2(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5ec6b2
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5ec6b2
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5ec6b2
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 7e2da69..19c5aa2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_5ee194 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5ee194(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_5ee194
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_5ee194
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_5ee194
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..48651df 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..30cafb1 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..63d1b71 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 5777b67..33528ec 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_614b58 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_614b58(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_614b58
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_614b58
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_614b58
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 428d45d..e55b374 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_635584 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_635584(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_635584
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_635584
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_635584
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 5403af3..70f85d0 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_63f34a = func():void {
-  $B2: {
-    %3:texture_storage_2d<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_63f34a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_63f34a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_63f34a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_63f34a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 5f76504..395d24f 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_646dbc = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_646dbc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_646dbc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_646dbc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_646dbc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..1340251 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 8e25743..2d8aa24 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_65b6aa = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_65b6aa(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_65b6aa
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_65b6aa
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_65b6aa
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 c1c500b..ac09169 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_65ba8b = func():void {
-  $B2: {
-    %3:texture_storage_2d<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_65ba8b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_65ba8b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_65ba8b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_65ba8b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..e68fa73 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..28e0f1a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..12bf298 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..2de6976 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 86333e3..c6f9a46 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6be9e0 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6be9e0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6be9e0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6be9e0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6be9e0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 fb606a2..0c74fb1 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6c4a70 = func():void {
-  $B2: {
-    %3:texture_storage_2d<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6c4a70(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6c4a70
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6c4a70
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6c4a70
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..27aead8 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 92d193f..ffcac17 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6d1809 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6d1809(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6d1809
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6d1809
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6d1809
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 53e68a4..1dfdf86 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6d259f = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6d259f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6d259f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6d259f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6d259f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..269f994 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 15e2053..5af5986 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6e6cc0 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6e6cc0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6e6cc0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6e6cc0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6e6cc0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 c0ea989..10feec7 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6f0c92 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6f0c92(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6f0c92
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6f0c92
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6f0c92
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 c8419b7..585efad 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6f3542 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6f3542(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6f3542
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6f3542
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6f3542
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..e4330fe 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 eb90406..9a6818f 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_6fb99b = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6fb99b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_6fb99b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_6fb99b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_6fb99b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..c47bb1e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 ea067ff..896bc28 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_704e1f = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_704e1f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_704e1f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_704e1f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_704e1f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 371f4b7..0e8d162 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_706236 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_706236(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_706236
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_706236
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_706236
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 2380b1e..cd121d3 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_706560 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_706560(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_706560
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_706560
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_706560
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..d5609a6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 a4e6ce8..0f083e0 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_726d6d = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_726d6d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_726d6d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_726d6d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_726d6d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..3cac01e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..fc06f20 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 9da11f0..4999cd9 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_73a735 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_73a735(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_73a735
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_73a735
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_73a735
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b28c9c7 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..65d5b1c 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 582856e..5011dcb 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_751256 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_751256(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_751256
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_751256
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_751256
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..e84ef5f 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 1c580fd..dbf5047 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_75bbd5 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_75bbd5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_75bbd5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_75bbd5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_75bbd5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b3535d3 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 b1399f7..63afe0d 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_7792fa = func():void {
-  $B2: {
-    %3:texture_storage_3d<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7792fa(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_7792fa
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_7792fa
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_7792fa
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..67eadad 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..de7a0c6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 74b9040..514b152 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_7b8f86 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7b8f86(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_7b8f86
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_7b8f86
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_7b8f86
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..1c9d203 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..fee4640 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..d973445 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 f55840b..826ad00 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_7d10e0 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7d10e0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_7d10e0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_7d10e0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_7d10e0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 33aa100..c913473 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_7dd042 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7dd042(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_7dd042
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_7dd042
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_7dd042
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 3136246..b9b0f3a 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_7e787a = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7e787a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_7e787a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_7e787a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_7e787a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..a7b7388 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 03fc8e8..7dfa795 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_803a10 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_803a10(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_803a10
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_803a10
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_803a10
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..632c311 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..0139582 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 2e850de..3a9419d 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_80bf1d = func():void {
-  $B2: {
-    %3:texture_storage_2d<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_80bf1d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_80bf1d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_80bf1d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_80bf1d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 710f14c..9006758 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_818df6 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_818df6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_818df6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_818df6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_818df6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 74b9fdc..6dd50b0 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_81ae31 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_81ae31(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_81ae31
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_81ae31
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_81ae31
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 f986a9a..f41a72e 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_820272 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_820272(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_820272
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_820272
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_820272
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..2364152 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 e4f3eec..3c5167a 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_84d435 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_84d435(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_84d435
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_84d435
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_84d435
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 bc86db9..c3be480 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_84f4f4 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_84f4f4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_84f4f4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_84f4f4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_84f4f4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 4ca237c..3aad56c 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8676c9 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8676c9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8676c9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8676c9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8676c9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 39ac939..9435bb2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_86f713 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_86f713(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_86f713
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_86f713
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_86f713
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..33d7966 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 c8d0780..02cee20 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_877c92 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_877c92(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_877c92
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_877c92
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_877c92
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 9dd6d504..e6c68bd 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8815b1 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8815b1(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8815b1
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8815b1
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8815b1
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 1679f62..b89b1ee 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_885921 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_885921(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_885921
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_885921
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_885921
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 177dd5c..787309e 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_88ce7e = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_88ce7e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_88ce7e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_88ce7e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_88ce7e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 5736334..f5f1d97 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8a16b0 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a16b0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8a16b0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8a16b0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8a16b0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 c62062c..b0bc434 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8a46ff = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a46ff(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8a46ff
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8a46ff
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8a46ff
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 9ca0cf7..2c3a437 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8a85b9 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a85b9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8a85b9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8a85b9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8a85b9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 f6cda78..9e17c67 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8a8681 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a8681(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8a8681
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8a8681
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8a8681
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 aee9074..590ed84 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8ae0bc = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8ae0bc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8ae0bc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8ae0bc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8ae0bc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..cc2979a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..210cbd6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..15b868a 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..e37721e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 e734118..ff3a067 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8cd841 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8cd841(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8cd841
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8cd841
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8cd841
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..fd03f05 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..22cd859 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 b5c2a12..4be0dfa 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_8ebdc9 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8ebdc9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_8ebdc9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_8ebdc9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_8ebdc9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..252178f 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..dfeecdf 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..d915e8f 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 899f8b4..277ec0b 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_90960e = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_90960e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_90960e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_90960e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_90960e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 e233fbe..dc39cad 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_90a553 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_90a553(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_90a553
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_90a553
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_90a553
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..1577a14 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..bf0ca3e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..675c514 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..09b5743 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 cfffe30..5f11ce0 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_976636 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_976636(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_976636
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_976636
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_976636
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..a6b19c6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..4d7abaf 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..e815b86 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 a25776a..3d9df99 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_9ba5c1 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_9ba5c1(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_9ba5c1
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_9ba5c1
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_9ba5c1
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 5636c1f..5a52c7a 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_9cea9e = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_9cea9e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_9cea9e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_9cea9e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_9cea9e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 37bac20..f03a6ce 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_9d7c62 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_9d7c62(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_9d7c62
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_9d7c62
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_9d7c62
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..f29303e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..e314753 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..cb7ecbf 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..1125d11 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..478a70e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..8592bac 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 38a40c9..ded97fd 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a0022f = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a0022f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a0022f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a0022f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a0022f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5b02a72 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..f46f333 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0074ea5..93f4d8f 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a14041 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a14041(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a14041
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a14041
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a14041
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..d2fed4e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 75a6be8..de9c1ce 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a19a12 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a19a12(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a19a12
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a19a12
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a19a12
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 68fcfad..8179043 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a24491 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a24491(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a24491
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a24491
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a24491
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..1105c52 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 a418b74..9bd6160 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a5b88e = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a5b88e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a5b88e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a5b88e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a5b88e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 21f5454..ab40b70 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a5c925 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a5c925(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a5c925
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a5c925
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a5c925
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..be7bb28 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 c4e76fe..a917d23 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a66ca4 = func():void {
-  $B2: {
-    %3:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a66ca4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a66ca4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a66ca4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a66ca4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..fc6e5a6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..4177035 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 cef39ea..8c5db72 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a702b6 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a702b6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a702b6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a702b6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a702b6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 09e3732..d8713e8 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a7fc47 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a7fc47(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a7fc47
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a7fc47
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a7fc47
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 8c694b5..00920c4 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_a9298c = func():void {
-  $B2: {
-    %3:texture_storage_1d<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a9298c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_a9298c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_a9298c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_a9298c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5d070c1 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 a49d67a..80756e5 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ab03b6 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ab03b6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ab03b6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ab03b6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ab03b6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 81e3ec0..11dbe7a 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ab788e = func():void {
-  $B2: {
-    %3:texture_storage_2d<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ab788e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ab788e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ab788e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ab788e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 9f68be7..38f07ee 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_abdd21 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_abdd21(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_abdd21
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_abdd21
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_abdd21
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 09b997d..c397874 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ac0a55 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ac0a55(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ac0a55
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ac0a55
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ac0a55
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b811f13 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0bac92e..2ccd301 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ae6a2a = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ae6a2a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ae6a2a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ae6a2a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ae6a2a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..9dea5e3 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 1033809..aa7728e 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_aedea3 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_aedea3(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_aedea3
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_aedea3
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_aedea3
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 f4fe414..4c10448 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b16110 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b16110(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b16110
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b16110
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b16110
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 2b717c4..5c722b0 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b286b4 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b286b4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b286b4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b286b4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b286b4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 b5586e4..252231c 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b36bc1 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b36bc1(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b36bc1
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b36bc1
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b36bc1
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5ccde89 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 c59af0a..29d85b2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b4389e = func():void {
-  $B2: {
-    %3:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b4389e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b4389e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b4389e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b4389e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..a8e7a99 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..46f065f 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 09885a5..dd7abeb 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b71c13 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b71c13(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b71c13
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b71c13
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b71c13
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 f636376..e49cbbd 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b7232c = func():void {
-  $B2: {
-    %3:texture_storage_1d<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b7232c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b7232c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b7232c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b7232c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..48f10f6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..3c5432b 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 4c2e579..f8788c8 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b89ffb = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b89ffb(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b89ffb
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b89ffb
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b89ffb
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..11cf8f2 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 ae15d5e..26ee0ce 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b9c81a = func():void {
-  $B2: {
-    %3:texture_storage_3d<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b9c81a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b9c81a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b9c81a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b9c81a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 12cd07f..819ee64 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_b9d863 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b9d863(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_b9d863
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_b9d863
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_b9d863
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..0216838 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 d3cdf75..27deb82 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_bc1423 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_bc1423(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_bc1423
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_bc1423
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_bc1423
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 a09afd9..70324df 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_bcc97a = func():void {
-  $B2: {
-    %3:texture_storage_2d<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_bcc97a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_bcc97a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_bcc97a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_bcc97a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 97b7f93..2ac7e10 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_bd6602 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_bd6602(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_bd6602
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_bd6602
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_bd6602
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..143bb4e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..34f8672 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..76c66d9 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 fe4ca3e..fdf8a34 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c06463 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c06463(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c06463
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c06463
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c06463
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 42882cb..b233bdc 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c1c664 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c1c664(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c1c664
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c1c664
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c1c664
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..7e0c2c4 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 f911f3e..404b9ab 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c1f760 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c1f760(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c1f760
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c1f760
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c1f760
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5095f14 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..2f7e9cb 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 22e7a69..94bcc47 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c33478 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rg32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c33478(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c33478
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c33478
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c33478
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 f80f8cd..b57bc82 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c35268 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c35268(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c35268
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c35268
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c35268
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..23d7d30 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 a24e662..81f4ff1 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c63f05 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c63f05(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c63f05
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c63f05
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c63f05
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 198956e..d644bf6 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_c79451 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c79451(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_c79451
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_c79451
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_c79451
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..acff77b 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..aeebdf7 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..79bd513 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 b35917d..21a5546 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ccac20 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ccac20(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ccac20
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ccac20
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ccac20
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..ee18ddb 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 4bd44f7..372c2be 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ceb832 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ceb832(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ceb832
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ceb832
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ceb832
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 2c0c22a..f4b4dae 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_d0d62c = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d0d62c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_d0d62c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_d0d62c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_d0d62c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 9e45831..ba82353 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_d0fadc = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d0fadc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_d0fadc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_d0fadc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_d0fadc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 52ec638..631eaef 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_d19db4 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d19db4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_d19db4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_d19db4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_d19db4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 de4d75b..18ac934 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_d1ab82 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d1ab82(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_d1ab82
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_d1ab82
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_d1ab82
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..710e932 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..f23ae07 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 4bc5fe7..90ed330 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_d3a22b = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d3a22b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_d3a22b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_d3a22b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_d3a22b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..282b0d7 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..34514d6 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..bb4f03e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..68097ca 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 cd4ad3a..0f4cd66 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_d86d33 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d86d33(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_d86d33
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_d86d33
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_d86d33
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 e966878..20a5d16 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_da530c = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_da530c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_da530c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_da530c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_da530c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 6ab468a..c9c87e8 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_db5128 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_db5128(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_db5128
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_db5128
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_db5128
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..051eb9c 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 6ee0143..cf99a73 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_dce0e2 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_dce0e2(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_dce0e2
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_dce0e2
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_dce0e2
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..02a6ceb 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 3d23822..f079be2 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_dd8b29 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_dd8b29(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_dd8b29
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_dd8b29
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_dd8b29
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..69e2a29 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 65c1671..620e24c 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_de38e5 = func():void {
-  $B2: {
-    %3:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_de38e5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_de38e5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_de38e5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_de38e5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..2a2387f 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 d0105fc..df3bba1 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_df0c51 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<u32>(1u), vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_df0c51(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_df0c51
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_df0c51
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_df0c51
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..9126cd7 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..3eeccd0 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..668e6b0 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0ceadf3..8f5554b 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_e077e7 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e077e7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_e077e7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_e077e7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_e077e7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..0c6fb070 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 da82960..335a568 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_e1784d = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e1784d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_e1784d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_e1784d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_e1784d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..f9c6f09 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 d0c8fc1..165aa69 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_e46fd8 = func():void {
-  $B2: {
-    %3:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e46fd8(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_e46fd8
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_e46fd8
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_e46fd8
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 405c746..b0029d9 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_e72bdc = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e72bdc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_e72bdc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_e72bdc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_e72bdc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5ff4c12 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 0dd0320..6f69074 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_e87f6e = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba16sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e87f6e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_e87f6e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_e87f6e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_e87f6e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..40a3f8e 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..85f5282 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 f5ad660..d83ddf6 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ea30d2 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ea30d2(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ea30d2
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ea30d2
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ea30d2
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..5ba4604 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..42237d3 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 d466bd5..c77a5dc 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ed6198 = func():void {
-  $B2: {
-    %3:texture_storage_3d<r8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec3<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ed6198(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ed6198
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ed6198
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ed6198
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b2686f5 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..099b568 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 012fee8..e6478f3 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_f05928 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1u, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f05928(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_f05928
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_f05928
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_f05928
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..2e0f295 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 e3c57ac..bb78c6b 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_f64d69 = func():void {
-  $B2: {
-    %3:texture_storage_1d<r32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f64d69(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_f64d69
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_f64d69
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_f64d69
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 89a285b..f2ff675 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_f6f392 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f6f392(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_f6f392
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_f6f392
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_f6f392
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..12afb61 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 8e36399..6bdfd06 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_f8aaf9 = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), 1i, vec4<i32>(1i)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f8aaf9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_f8aaf9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_f8aaf9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_f8aaf9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..7035708 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 8ac603b..949c3fe 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_f975a0 = func():void {
-  $B2: {
-    %3:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<i32>(1i), vec4<f32>(1.0f)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f975a0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_f975a0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_f975a0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_f975a0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..b2245e1 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..c808eac 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..c284231 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 cc3903b..8fa222f 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_fc916e = func():void {
-  $B2: {
-    %3:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %4:void = textureStore %3, vec2<u32>(1u), 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_fc916e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_fc916e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_fc916e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_fc916e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
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 877ebc6..6b66abc 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 877ebc6..530d045 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
@@ -1,9 +1,28 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+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);
+}
+kernel void compute_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);
+}
+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 da43bcf..e776716 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
@@ -1,39 +1,29 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+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();
 }
-
-%textureStore_ff23b3 = func():void {
-  $B2: {
-    %3:texture_storage_1d<rgba16uint, read_write> = load %arg_0
-    %4:void = textureStore %3, 1i, vec4<u32>(1u)
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ff23b3(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %6:void = call %textureStore_ff23b3
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %8:void = call %textureStore_ff23b3
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %10:void = call %textureStore_ff23b3
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl
index 877ebc6..3689f66 100644
--- a/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/00ca64.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_00ca64(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/0148bd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl
index 877ebc6..18fd205 100644
--- a/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0148bd.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_0148bd(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/031506.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl
index 1a9f15b..e033538 100644
--- a/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/031506.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_031506(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_031506 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<r32float, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_031506(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_031506
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_031506
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_031506
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl
index 770b286..4871e4a 100644
--- a/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/036d0e.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_036d0e(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_036d0e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_036d0e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_036d0e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_036d0e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_036d0e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl
index 49adaf9..7c17ac4 100644
--- a/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/03e7a0.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_03e7a0(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_03e7a0 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rgba16uint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_03e7a0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_03e7a0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_03e7a0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_03e7a0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl
index cd6458a..57623c1 100644
--- a/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/042b06.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_042b06(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_042b06 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_042b06(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_042b06
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_042b06
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_042b06
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl
index dd07330..eb92932 100644
--- a/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/052a4e.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_052a4e(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_052a4e = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_052a4e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_052a4e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_052a4e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_052a4e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl
index 5f306fb..07945bf 100644
--- a/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/053664.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_053664(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_053664 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_053664(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_053664
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_053664
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_053664
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl
index 877ebc6..6ad9f14 100644
--- a/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/05ce15.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_05ce15(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/064c7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl
index 877ebc6..b9150a8 100644
--- a/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/064c7f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_064c7f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/068641.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl
index 877ebc6..14fbab9 100644
--- a/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/068641.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_068641(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/06e49c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl
index 877ebc6..7e0a730 100644
--- a/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/06e49c.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_06e49c(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/07548b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl
index 877ebc6..a5ec7d5 100644
--- a/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/07548b.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_07548b(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/09e4d5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl
index 3a40e3a..850e824 100644
--- a/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/09e4d5.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_09e4d5(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_09e4d5 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_09e4d5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_09e4d5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_09e4d5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_09e4d5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl
index 877ebc6..ee73925 100644
--- a/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0a1a79.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_0a1a79(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/0ad124.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0ad124.wgsl.expected.ir.msl
index 0d98c68..61a01e9 100644
--- a/test/tint/builtins/gen/var/textureStore/0ad124.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0ad124.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_0ad124(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_0ad124 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<r8unorm, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_0ad124(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_0ad124
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_0ad124
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_0ad124
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl
index b810d24..2f7a64e 100644
--- a/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0ade9a.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_0ade9a(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_0ade9a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_0ade9a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_0ade9a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_0ade9a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_0ade9a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl
index 877ebc6..30b73d9 100644
--- a/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0af6b5.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_0af6b5(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/0c3dff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl
index 877ebc6..72e8c27 100644
--- a/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0c3dff.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_0c3dff(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/0cc825.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl
index 877ebc6..b11cbf8 100644
--- a/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0cc825.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_0cc825(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/0ff97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl
index 8222399..0e738d8 100644
--- a/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/0ff97a.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_0ff97a(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_0ff97a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_0ff97a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_0ff97a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_0ff97a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_0ff97a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl
index 52e456f..27b6b40 100644
--- a/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/101325.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_101325(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_101325 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rgba16uint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_101325(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_101325
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_101325
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_101325
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl
index 877ebc6..c03e129 100644
--- a/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/102722.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_102722(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/145061.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl
index 0048053..fc26cfb 100644
--- a/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/145061.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_145061(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_145061 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rgba16uint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_145061(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_145061
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_145061
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_145061
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl
index 877ebc6..707a48a 100644
--- a/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/158cf0.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_158cf0(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/178e69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl
index 9c29733..37c7bbc 100644
--- a/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/178e69.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_178e69(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_178e69 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<bgra8unorm, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_178e69(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_178e69
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_178e69
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_178e69
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl
index 877ebc6..aa6b9d8 100644
--- a/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1839f2.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1839f2(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/195d1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl
index e19a985..7f25945 100644
--- a/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/195d1b.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_195d1b(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_195d1b = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba32float, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_195d1b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_195d1b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_195d1b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_195d1b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl
index cea31e8..4d45bdd 100644
--- a/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/197637.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_197637(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_197637 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba32float, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_197637(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_197637
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_197637
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_197637
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl
index 877ebc6..a2eedbc 100644
--- a/test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1a264d.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1a264d(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1a6c0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl
index 0cdb6f7..93ed6b8 100644
--- a/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1a6c0b.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_1a6c0b(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_1a6c0b = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1a6c0b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_1a6c0b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_1a6c0b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_1a6c0b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl
index 877ebc6..a385f15 100644
--- a/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1a7d35.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1a7d35(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1af236.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl
index 4637a26..fe0040e 100644
--- a/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1af236.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_1af236(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_1af236 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1af236(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_1af236
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_1af236
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_1af236
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl
index 877ebc6..457ebdc 100644
--- a/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1bbd08.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1bbd08(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1c02e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl
index 877ebc6..9625918 100644
--- a/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1c02e7.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1c02e7(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1dc954.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl
index 877ebc6..038e0a3 100644
--- a/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1dc954.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1dc954(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1e20f2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl
index 877ebc6..14bdab0 100644
--- a/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1e20f2.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1e20f2(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1e79f0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1e79f0.wgsl.expected.ir.msl
index 877ebc6..40c7294 100644
--- a/test/tint/builtins/gen/var/textureStore/1e79f0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1e79f0.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1e79f0(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1e9fbd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl
index 8dbedec..5973890 100644
--- a/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1e9fbd.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_1e9fbd(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_1e9fbd = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1e9fbd(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_1e9fbd
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_1e9fbd
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_1e9fbd
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl
index 877ebc6..bfa2f1e 100644
--- a/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1efc36.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1efc36(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1f1ef8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl
index 877ebc6..f2ca81e 100644
--- a/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1f1ef8.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_1f1ef8(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/1fef04.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl
index a03a8b97..2e2fb86 100644
--- a/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/1fef04.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_1fef04(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_1fef04 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<r32sint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_1fef04(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_1fef04
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_1fef04
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_1fef04
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl
index e1856f1..ef1213f 100644
--- a/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2046db.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2046db(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2046db = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2046db(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_2046db
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_2046db
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_2046db
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl
index 877ebc6..ffff502 100644
--- a/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/207fdd.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_207fdd(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2173fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl
index eed9603..3319bf5 100644
--- a/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2173fd.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2173fd(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2173fd = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rgba32uint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2173fd(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_2173fd
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_2173fd
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_2173fd
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl
index 877ebc6..607bae4 100644
--- a/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/22d955.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_22d955(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/22f045.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl
index 877ebc6..e8771a8 100644
--- a/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/22f045.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_22f045(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2383fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl
index 877ebc6..65c81f3 100644
--- a/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2383fc.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2383fc(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/24e6b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl
index 24c6eac..97d7931 100644
--- a/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/24e6b7.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_24e6b7(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_24e6b7 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<r32sint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_24e6b7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_24e6b7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_24e6b7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_24e6b7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl
index 877ebc6..fd042cb 100644
--- a/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/258ab0.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_258ab0(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/26a26d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl
index 14a1c69..1dbd9f9 100644
--- a/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/26a26d.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_26a26d(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_26a26d = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_26a26d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_26a26d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_26a26d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_26a26d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl
index 877ebc6..298318c 100644
--- a/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/26bf70.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_26bf70(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/27063a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl
index 877ebc6..d8b6870 100644
--- a/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/27063a.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_27063a(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/272f5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/272f5a.wgsl.expected.ir.msl
index eb6f06b..518dd6a 100644
--- a/test/tint/builtins/gen/var/textureStore/272f5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/272f5a.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_272f5a(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_272f5a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_272f5a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_272f5a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_272f5a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_272f5a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl
index 877ebc6..1735c76 100644
--- a/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2796b4.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2796b4(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/285218.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl
index 877ebc6..913baf0 100644
--- a/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/285218.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_285218(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/28a7ec.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl
index 877ebc6..47c79b7 100644
--- a/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/28a7ec.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_28a7ec(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/28e109.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl
index 232c6c1..1b86be6 100644
--- a/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/28e109.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_28e109(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_28e109 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rgba8sint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_28e109(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_28e109
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_28e109
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_28e109
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl
index 28cb358..d53f4c5 100644
--- a/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2a60c9.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2a60c9(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2a60c9 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2a60c9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_2a60c9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_2a60c9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_2a60c9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl
index 877ebc6..3fc3f3f 100644
--- a/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2ac6c7.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2ac6c7(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2addd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl
index 6a12ad7..6a1e9ca 100644
--- a/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2addd6.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2addd6(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2addd6 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2addd6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_2addd6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_2addd6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_2addd6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl
index 19654fb..ae6e0c0 100644
--- a/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2c76db.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2c76db(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2c76db = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2c76db(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_2c76db
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_2c76db
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_2c76db
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl
index 877ebc6..9a2ec15 100644
--- a/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2d2835.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2d2835(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2e4245.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl
index 877ebc6..efd8ef6 100644
--- a/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2e4245.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2e4245(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2e512f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2e512f.wgsl.expected.ir.msl
index 6eacff7..2f69087 100644
--- a/test/tint/builtins/gen/var/textureStore/2e512f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2e512f.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2e512f(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2e512f = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<r8unorm, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2e512f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_2e512f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_2e512f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_2e512f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl
index 877ebc6..b5b7620 100644
--- a/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2e6102.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2e6102(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2eb2a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl
index 877ebc6..012538a 100644
--- a/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2eb2a4.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2eb2a4(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2ed2a3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl
index 877ebc6..a68dfed 100644
--- a/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2ed2a3.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_2ed2a3(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/2f29ea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl
index 054d228..020e66b 100644
--- a/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/2f29ea.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_2f29ea(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_2f29ea = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rgba32sint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_2f29ea(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_2f29ea
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_2f29ea
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_2f29ea
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl
index 877ebc6..d812f679 100644
--- a/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/30b0b0.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_30b0b0(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/312f27.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl
index f78ff10..ebb6437 100644
--- a/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/312f27.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_312f27(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_312f27 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_312f27(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_312f27
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_312f27
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_312f27
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl
index 877ebc6..9d6fc40 100644
--- a/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/31745b.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_31745b(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/319029.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl
index 877ebc6..21cb299 100644
--- a/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/319029.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_319029(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/32d3d6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl
index 1df4ada..47be86a 100644
--- a/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/32d3d6.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_32d3d6(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_32d3d6 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<r32uint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_32d3d6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_32d3d6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_32d3d6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_32d3d6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl
index 877ebc6..1f8491d 100644
--- a/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/32f368.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_32f368(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/330b7c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl
index 877ebc6..c7e8548 100644
--- a/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/330b7c.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_330b7c(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3310d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl
index 6e8e0c3..9904031 100644
--- a/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3310d3.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_3310d3(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_3310d3 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3310d3(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_3310d3
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_3310d3
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_3310d3
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl
index 877ebc6..5e244a1 100644
--- a/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/331aee.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_331aee(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/33cec0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl
index 877ebc6..9d152e1 100644
--- a/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/33cec0.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_33cec0(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/345332.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl
index 84f5c73..37e15b2 100644
--- a/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/345332.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_345332(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_345332 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rgba8uint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_345332(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_345332
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_345332
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_345332
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl
index 877ebc6..9f902c6 100644
--- a/test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/37eeef.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_37eeef(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/37ffd4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl
index 877ebc6..38156c1 100644
--- a/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/37ffd4.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_37ffd4(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/38e8d7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl
index 877ebc6..ee2947d 100644
--- a/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/38e8d7.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_38e8d7(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3a52ac.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl
index 877ebc6..dd76d6a 100644
--- a/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3a52ac.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_3a52ac(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3bb7a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl
index 877ebc6..3212d12 100644
--- a/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3bb7a1.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_3bb7a1(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3bec15.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl
index 877ebc6..b67af6e 100644
--- a/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3bec15.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_3bec15(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3c1937.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl
index 877ebc6..6e832e4 100644
--- a/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3c1937.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_3c1937(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3d1ebe.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl
index 3fc29a2..3ac5439 100644
--- a/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3d1ebe.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_3d1ebe(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_3d1ebe = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<r32float, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3d1ebe(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_3d1ebe
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_3d1ebe
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_3d1ebe
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl
index 877ebc6..de282cc 100644
--- a/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3d6f01.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_3d6f01(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/3d96a4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl
index 979d34ff..7cbf173 100644
--- a/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3d96a4.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_3d96a4(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_3d96a4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rgba32sint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3d96a4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_3d96a4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_3d96a4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_3d96a4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl
index 3ed6786..411c464 100644
--- a/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3e0dc4.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_3e0dc4(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_3e0dc4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3e0dc4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_3e0dc4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_3e0dc4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_3e0dc4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl
index 2907fe9..602cf5e 100644
--- a/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3f61ca.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_3f61ca(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_3f61ca = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_3f61ca(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_3f61ca
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_3f61ca
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_3f61ca
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl
index 877ebc6..05ca798 100644
--- a/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/3fb31f.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_3fb31f(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/40c455.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl
index 877ebc6..1d27cda 100644
--- a/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/40c455.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_40c455(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/4288fc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl
index 877ebc6..e379391 100644
--- a/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4288fc.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_4288fc(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/43d1df.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/43d1df.wgsl.expected.ir.msl
index 4b1a6fc..fd2f58f 100644
--- a/test/tint/builtins/gen/var/textureStore/43d1df.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/43d1df.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_43d1df(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_43d1df = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_43d1df(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_43d1df
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_43d1df
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_43d1df
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl
index b1bd42e..8bab146 100644
--- a/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/441222.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_441222(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_441222 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rgba32sint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_441222(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_441222
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_441222
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_441222
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl
index 877ebc6..ee0bde7 100644
--- a/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/441ba8.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_441ba8(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/4483e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl
index 5cfba14..0cbb43c 100644
--- a/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4483e7.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_4483e7(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_4483e7 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rgba32sint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4483e7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_4483e7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_4483e7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_4483e7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl
index ca5c54b..910c631 100644
--- a/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/44b372.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_44b372(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_44b372 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rgba16sint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_44b372(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_44b372
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_44b372
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_44b372
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl
index 877ebc6..3c2262a 100644
--- a/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/44daa7.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_44daa7(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/473ead.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl
index 31a9294..2b5cd68 100644
--- a/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/473ead.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_473ead(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_473ead = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rg32uint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_473ead(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_473ead
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_473ead
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_473ead
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl
index be541c7..e289cf9 100644
--- a/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/47bd70.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_47bd70(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_47bd70 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_47bd70(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_47bd70
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_47bd70
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_47bd70
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl
index 877ebc6..fbed739 100644
--- a/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/486500.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_486500(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/48cb56.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl
index 187eadd..cb8c96a 100644
--- a/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/48cb56.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_48cb56(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_48cb56 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_48cb56(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_48cb56
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_48cb56
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_48cb56
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl
index 877ebc6..36f9e22 100644
--- a/test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/48eae1.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_48eae1(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/4bf1fd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl
index 0f638d7..45bf8fc 100644
--- a/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4bf1fd.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_4bf1fd(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_4bf1fd = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<r32uint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4bf1fd(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_4bf1fd
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_4bf1fd
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_4bf1fd
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl
index 877ebc6..6ce46b9 100644
--- a/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4c454f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_4c454f(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/4c76b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl
index a0c2b48..a46472c 100644
--- a/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4c76b7.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_4c76b7(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_4c76b7 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4c76b7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_4c76b7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_4c76b7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_4c76b7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl
index 1bdcc28..95a2c80 100644
--- a/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4cce74.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_4cce74(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_4cce74 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rg32uint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4cce74(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_4cce74
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_4cce74
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_4cce74
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl
index 877ebc6..f6d6659 100644
--- a/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4d359d.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_4d359d(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/4ddf52.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl
index 3a6ff7b..7a06398 100644
--- a/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4ddf52.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_4ddf52(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_4ddf52 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rgba16sint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4ddf52(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_4ddf52
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_4ddf52
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_4ddf52
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl
index 4876340..cfb6716 100644
--- a/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4e2b3a.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_4e2b3a(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_4e2b3a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_4e2b3a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_4e2b3a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_4e2b3a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_4e2b3a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl
index 877ebc6..3085b58 100644
--- a/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/4fc057.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_4fc057(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/5030f5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl
index 658b24d..0d6615e 100644
--- a/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5030f5.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5030f5(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5030f5 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5030f5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_5030f5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_5030f5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_5030f5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl
index 877ebc6..261f8c3 100644
--- a/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/506a71.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_506a71(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/51ec82.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl
index a352962..3ad8a38 100644
--- a/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/51ec82.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_51ec82(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_51ec82 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rg32float, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_51ec82(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_51ec82
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_51ec82
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_51ec82
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl
index 5a0c87c..34d7384 100644
--- a/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5246b4.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5246b4(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5246b4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<r32uint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5246b4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_5246b4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_5246b4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_5246b4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl
index 877ebc6..76e10ba 100644
--- a/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/52f503.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_52f503(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/53a68b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl
index 9bb503b..5cb8c2b 100644
--- a/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/53a68b.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_53a68b(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_53a68b = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<r32uint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_53a68b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_53a68b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_53a68b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_53a68b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl
index 248d50f..1fc0b50 100644
--- a/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5425ab.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5425ab(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5425ab = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rg32uint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5425ab(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_5425ab
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_5425ab
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_5425ab
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl
index 6b786d3..272cdb8 100644
--- a/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/544f06.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_544f06(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_544f06 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_544f06(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_544f06
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_544f06
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_544f06
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl
index 3aef58f..91f73af 100644
--- a/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/55f9dc.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_55f9dc(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_55f9dc = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_55f9dc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_55f9dc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_55f9dc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_55f9dc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl
index 59d8f7e..34bab81 100644
--- a/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/574a31.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_574a31(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_574a31 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rg32sint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_574a31(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_574a31
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_574a31
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_574a31
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl
index c56c9fd..049d438 100644
--- a/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/579b93.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_579b93(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_579b93 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<r32uint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_579b93(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_579b93
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_579b93
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_579b93
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl
index 877ebc6..66485df 100644
--- a/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5841f8.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_5841f8(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/58fc35.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl
index ee3dda9..a06e971 100644
--- a/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/58fc35.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_58fc35(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_58fc35 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba16float, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_58fc35(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_58fc35
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_58fc35
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_58fc35
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl
index 877ebc6..886855e 100644
--- a/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/59a0ab.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_59a0ab(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/5a2f8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl
index 877ebc6..daefca4 100644
--- a/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5a2f8f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_5a2f8f(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/5a8b41.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl
index 28a696e..2c7e851 100644
--- a/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5a8b41.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5a8b41(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5a8b41 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5a8b41(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_5a8b41
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_5a8b41
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_5a8b41
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl
index 760b399..3864abc 100644
--- a/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5b17eb.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5b17eb(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5b17eb = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rg32float, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5b17eb(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_5b17eb
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_5b17eb
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_5b17eb
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl
index 1eceebb..5fbaa36 100644
--- a/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5b4522.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5b4522(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5b4522 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rgba8uint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5b4522(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_5b4522
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_5b4522
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_5b4522
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl
index 877ebc6..eaa024e 100644
--- a/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5bc4f3.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_5bc4f3(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/5ddc61.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl
index 877ebc6..cd78e63 100644
--- a/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5ddc61.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_5ddc61(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/5ec6b2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl
index 8d754b2..10b5443 100644
--- a/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5ec6b2.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5ec6b2(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5ec6b2 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<r32float, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5ec6b2(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_5ec6b2
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_5ec6b2
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_5ec6b2
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl
index 632e903..033e335 100644
--- a/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5ee194.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_5ee194(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_5ee194 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_5ee194(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_5ee194
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_5ee194
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_5ee194
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl
index 877ebc6..a864569 100644
--- a/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/5f9a49.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_5f9a49(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/602b5a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl
index 877ebc6..cbfa4b2 100644
--- a/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/602b5a.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_602b5a(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/60975f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl
index 877ebc6..e50bd8f 100644
--- a/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/60975f.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_60975f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/614b58.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl
index de843b2..48d7a7f 100644
--- a/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/614b58.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_614b58(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_614b58 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_614b58(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_614b58
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_614b58
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_614b58
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl
index d42b23d..6da05cf 100644
--- a/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/635584.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_635584(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_635584 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rg32float, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_635584(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_635584
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_635584
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_635584
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl
index bd4b7a2..6b8f5c0 100644
--- a/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/63f34a.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_63f34a(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_63f34a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rg32sint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_63f34a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_63f34a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_63f34a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_63f34a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl
index 311dd0a..5d55df1 100644
--- a/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/646dbc.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_646dbc(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_646dbc = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rgba32sint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_646dbc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_646dbc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_646dbc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_646dbc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl
index 877ebc6..e955610 100644
--- a/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/658a74.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_658a74(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/65b6aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl
index 29ad191..a3f6ff1 100644
--- a/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/65b6aa.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_65b6aa(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_65b6aa = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rgba8sint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_65b6aa(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_65b6aa
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_65b6aa
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_65b6aa
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl
index 6ddedc4..382d647 100644
--- a/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/65ba8b.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_65ba8b(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_65ba8b = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<r8unorm, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_65ba8b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_65ba8b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_65ba8b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_65ba8b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl
index 877ebc6..f13f27a 100644
--- a/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/682fd6.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_682fd6(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/699a1b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl
index 877ebc6..831f4c4 100644
--- a/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/699a1b.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_699a1b(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/6b75c3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl
index 877ebc6..d31f4aa 100644
--- a/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6b75c3.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_6b75c3(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/6b80d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl
index 877ebc6..95153a3 100644
--- a/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6b80d2.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_6b80d2(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/6be9e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl
index 8d9c752..6b2975a 100644
--- a/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6be9e0.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6be9e0(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6be9e0 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<r32float, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6be9e0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_6be9e0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_6be9e0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_6be9e0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl
index b2cea3d..905745e 100644
--- a/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6c4a70.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6c4a70(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6c4a70 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<r32sint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6c4a70(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_6c4a70
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_6c4a70
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_6c4a70
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl
index 877ebc6..208274a 100644
--- a/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6cff2e.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_6cff2e(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/6d1809.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl
index 9f48a35..8b144b8 100644
--- a/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6d1809.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6d1809(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6d1809 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6d1809(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_6d1809
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_6d1809
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_6d1809
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl
index 5dc1c35..a7442db 100644
--- a/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6d259f.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6d259f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6d259f = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rgba32uint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6d259f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_6d259f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_6d259f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_6d259f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl
index 877ebc6..10576ca 100644
--- a/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6da692.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_6da692(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/6e6cc0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl
index 493fb80..ab1e14a 100644
--- a/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6e6cc0.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6e6cc0(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6e6cc0 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<r32float, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6e6cc0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_6e6cc0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_6e6cc0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_6e6cc0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl
index 9fdb806..b458f21 100644
--- a/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6f0c92.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6f0c92(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6f0c92 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6f0c92(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_6f0c92
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_6f0c92
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_6f0c92
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl
index 316f7e5..a1c82dd 100644
--- a/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6f3542.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6f3542(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6f3542 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rgba16uint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6f3542(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_6f3542
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_6f3542
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_6f3542
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl
index 877ebc6..e7c866f 100644
--- a/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6f8642.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_6f8642(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/6fb99b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl
index 5b21ca4..49f1f8d 100644
--- a/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6fb99b.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_6fb99b(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_6fb99b = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba16float, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_6fb99b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_6fb99b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_6fb99b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_6fb99b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl
index 877ebc6..b64e7e6 100644
--- a/test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/6fd2b1.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_6fd2b1(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/704e1f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl
index b3d5e18..92f2267e 100644
--- a/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/704e1f.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_704e1f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_704e1f = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_704e1f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_704e1f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_704e1f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_704e1f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl
index 2d33612..9f7b80b 100644
--- a/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/706236.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_706236(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_706236 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba8unorm, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_706236(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_706236
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_706236
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_706236
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl
index 41aab47..c27402c 100644
--- a/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/706560.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_706560(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_706560 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_706560(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_706560
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_706560
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_706560
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl
index 877ebc6..4cd8eb1 100644
--- a/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/726472.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_726472(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/726d6d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl
index f869430..a2b2ca1 100644
--- a/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/726d6d.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_726d6d(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_726d6d = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba16float, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_726d6d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_726d6d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_726d6d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_726d6d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl
index 877ebc6..028c26f 100644
--- a/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/72fa64.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_72fa64(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/731349.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl
index 877ebc6..8cda3b0 100644
--- a/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/731349.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_731349(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/73a735.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl
index cdc8572..e40f6e3 100644
--- a/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/73a735.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_73a735(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_73a735 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_73a735(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_73a735
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_73a735
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_73a735
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl
index 877ebc6..0cbb2f3 100644
--- a/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/73bbbc.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_73bbbc(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/74886f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/74886f.wgsl.expected.ir.msl
index 877ebc6..970d612 100644
--- a/test/tint/builtins/gen/var/textureStore/74886f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/74886f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_74886f(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/751256.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl
index 56b34f5..9568e20 100644
--- a/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/751256.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_751256(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_751256 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rgba32uint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_751256(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_751256
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_751256
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_751256
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl
index 877ebc6..277fe8a 100644
--- a/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/752da6.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_752da6(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/75bbd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl
index 9c6ff1a..4a2627e 100644
--- a/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/75bbd5.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_75bbd5(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_75bbd5 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_75bbd5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_75bbd5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_75bbd5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_75bbd5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl
index 877ebc6..1ec7a3d 100644
--- a/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/76affd.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_76affd(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/7792fa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl
index 235dda1..268e747 100644
--- a/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7792fa.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_7792fa(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_7792fa = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rg32sint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7792fa(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_7792fa
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_7792fa
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_7792fa
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl
index 877ebc6..00d51b7 100644
--- a/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/779d14.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_779d14(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/77c0ae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl
index 877ebc6..a2ee047 100644
--- a/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/77c0ae.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_77c0ae(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/7b8f86.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl
index 5ffbb81..025e9d3 100644
--- a/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7b8f86.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_7b8f86(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_7b8f86 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rg32float, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7b8f86(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_7b8f86
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_7b8f86
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_7b8f86
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl
index 877ebc6..bc1dcf6 100644
--- a/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7bb211.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_7bb211(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/7cec8d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl
index 877ebc6..dcbec43 100644
--- a/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7cec8d.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_7cec8d(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/7cf6e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl
index 877ebc6..c07f52d 100644
--- a/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7cf6e7.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_7cf6e7(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/7d10e0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl
index 1f417e6..63f95ba 100644
--- a/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7d10e0.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_7d10e0(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_7d10e0 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba32float, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7d10e0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_7d10e0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_7d10e0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_7d10e0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl
index 65df419..cc61492 100644
--- a/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7dd042.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_7dd042(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_7dd042 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7dd042(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_7dd042
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_7dd042
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_7dd042
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl
index 697cffc..97c730c 100644
--- a/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7e787a.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_7e787a(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_7e787a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba32float, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_7e787a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_7e787a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_7e787a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_7e787a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl
index 877ebc6..7d74f7a 100644
--- a/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/7f7fae.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_7f7fae(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/803a10.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/803a10.wgsl.expected.ir.msl
index 81af8cd..01e1dc9 100644
--- a/test/tint/builtins/gen/var/textureStore/803a10.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/803a10.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_803a10(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_803a10 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<r8unorm, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_803a10(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_803a10
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_803a10
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_803a10
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl
index 877ebc6..51cdf88 100644
--- a/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/804942.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_804942(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/805dae.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl
index 877ebc6..aa86599 100644
--- a/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/805dae.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_805dae(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/80bf1d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl
index 6a21585..55cd24e 100644
--- a/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/80bf1d.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_80bf1d(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_80bf1d = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rg32sint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_80bf1d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_80bf1d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_80bf1d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_80bf1d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl
index c9e4cf1..903565d 100644
--- a/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/818df6.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_818df6(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_818df6 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba16float, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_818df6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_818df6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_818df6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_818df6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl
index 593c30e0..a787d7b 100644
--- a/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/81ae31.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_81ae31(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_81ae31 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_81ae31(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_81ae31
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_81ae31
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_81ae31
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl
index b8a9be7..6bf3573 100644
--- a/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/820272.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_820272(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_820272 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_820272(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_820272
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_820272
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_820272
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl
index 877ebc6..be528ee 100644
--- a/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/83bcc1.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_83bcc1(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/84d435.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl
index 06aa231..876124b 100644
--- a/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/84d435.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_84d435(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_84d435 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_84d435(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_84d435
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_84d435
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_84d435
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl
index e72f8ea..d859cc3 100644
--- a/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/84f4f4.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_84f4f4(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_84f4f4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_84f4f4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_84f4f4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_84f4f4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_84f4f4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl
index d08badd..63a5bfa 100644
--- a/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8676c9.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8676c9(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8676c9 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<r32uint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8676c9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_8676c9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_8676c9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_8676c9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl
index 97c7879..7291d8e 100644
--- a/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/86f713.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_86f713(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_86f713 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rgba16sint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_86f713(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_86f713
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_86f713
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_86f713
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl
index 877ebc6..ab3b54e 100644
--- a/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/872747.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_872747(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/877c92.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl
index 6eb3de5..7af1554 100644
--- a/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/877c92.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_877c92(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_877c92 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba8snorm, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_877c92(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_877c92
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_877c92
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_877c92
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl
index dc5eea5..795c4c0 100644
--- a/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8815b1.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8815b1(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8815b1 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba16sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8815b1(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_8815b1
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_8815b1
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_8815b1
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl
index 6a57211..2751d93 100644
--- a/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/885921.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_885921(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_885921 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba8unorm, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_885921(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_885921
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_885921
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_885921
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl
index 57ad9c7..206d298 100644
--- a/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/88ce7e.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_88ce7e(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_88ce7e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rgba8sint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_88ce7e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_88ce7e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_88ce7e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_88ce7e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl
index a6e5e09..eaaa77a 100644
--- a/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a16b0.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8a16b0(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8a16b0 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a16b0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_8a16b0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_8a16b0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_8a16b0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl
index 01d8c5d..6e7eb42 100644
--- a/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a46ff.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8a46ff(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8a46ff = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba16float, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a46ff(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_8a46ff
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_8a46ff
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_8a46ff
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl
index fa89898..a37b248 100644
--- a/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a85b9.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8a85b9(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8a85b9 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a85b9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_8a85b9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_8a85b9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_8a85b9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl
index 73faffe..1ba5c1f 100644
--- a/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8a8681.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8a8681(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8a8681 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rg32uint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8a8681(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_8a8681
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_8a8681
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_8a8681
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl
index bc62be0..92c3cad 100644
--- a/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ae0bc.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8ae0bc(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8ae0bc = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8ae0bc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_8ae0bc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_8ae0bc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_8ae0bc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl
index 877ebc6..e032e71 100644
--- a/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8b9310.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8b9310(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8bb287.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl
index 877ebc6..6592fe4 100644
--- a/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8bb287.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8bb287(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8c76e9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl
index 877ebc6..88384ed 100644
--- a/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8c76e9.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8c76e9(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8cd611.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8cd611.wgsl.expected.ir.msl
index 877ebc6..cd51130 100644
--- a/test/tint/builtins/gen/var/textureStore/8cd611.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8cd611.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8cd611(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8cd841.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl
index c3bb67f..ba3c8f8 100644
--- a/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8cd841.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8cd841(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8cd841 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8cd841(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_8cd841
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_8cd841
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_8cd841
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl
index 877ebc6..eb3ccd4 100644
--- a/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8dc54f.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8dc54f(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8e0479.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl
index 877ebc6..f0e6c86 100644
--- a/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8e0479.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8e0479(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8ebdc9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl
index e8185bd..f1668e4 100644
--- a/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ebdc9.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_8ebdc9(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_8ebdc9 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_8ebdc9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_8ebdc9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_8ebdc9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_8ebdc9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl
index 877ebc6..0ee5e9d 100644
--- a/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ed9f8.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8ed9f8(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8f71a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl
index 877ebc6..30f5268 100644
--- a/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8f71a1.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8f71a1(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/8ff674.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl
index 877ebc6..ec816cf 100644
--- a/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/8ff674.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_8ff674(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/90960e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl
index 05a064d..f986b7c 100644
--- a/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/90960e.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_90960e(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_90960e = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<rgba16float, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_90960e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_90960e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_90960e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_90960e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl
index 09e53ea..90769cf 100644
--- a/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/90a553.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_90a553(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_90a553 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba8sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_90a553(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_90a553
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_90a553
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_90a553
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl
index 877ebc6..116127f 100644
--- a/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/958353.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_958353(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/959d94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl
index 877ebc6..2b627b0 100644
--- a/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/959d94.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_959d94(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/95e452.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl
index 877ebc6..8577e11 100644
--- a/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/95e452.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_95e452(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/969534.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl
index 877ebc6..3dabbf1 100644
--- a/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/969534.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_969534(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/976636.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl
index 68a6ef1..1dfada3 100644
--- a/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/976636.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_976636(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_976636 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rgba8sint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_976636(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_976636
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_976636
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_976636
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl
index 877ebc6..481a45c 100644
--- a/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9938b7.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9938b7(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9a3ecc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl
index 877ebc6..f2e5233 100644
--- a/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9a3ecc.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9a3ecc(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9aedd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl
index 877ebc6..bfa47f0 100644
--- a/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9aedd3.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9aedd3(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9ba5c1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl
index 8474c2a..590d8a1 100644
--- a/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9ba5c1.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_9ba5c1(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_9ba5c1 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rgba16uint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_9ba5c1(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_9ba5c1
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_9ba5c1
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_9ba5c1
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl
index e2fd58c..1357afb 100644
--- a/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9cea9e.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_9cea9e(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_9cea9e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_9cea9e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_9cea9e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_9cea9e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_9cea9e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl
index a3e9738..5356378 100644
--- a/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9d7c62.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_9d7c62(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_9d7c62 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rgba8uint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_9d7c62(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_9d7c62
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_9d7c62
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_9d7c62
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl
index 877ebc6..add863e 100644
--- a/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9d8668.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9d8668(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9d9cd5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl
index 877ebc6..19ec296 100644
--- a/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9d9cd5.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9d9cd5(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9e3ec5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl
index 877ebc6..86cd01d 100644
--- a/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9e3ec5.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9e3ec5(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9e5bc2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9e5bc2.wgsl.expected.ir.msl
index 877ebc6..2e35c82 100644
--- a/test/tint/builtins/gen/var/textureStore/9e5bc2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9e5bc2.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9e5bc2(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9f5318.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl
index 877ebc6..6064336 100644
--- a/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9f5318.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9f5318(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/9f7cea.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl
index 877ebc6..a41b247 100644
--- a/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/9f7cea.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_9f7cea(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a0022f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl
index c38b0f3..fe55372 100644
--- a/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a0022f.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a0022f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a0022f = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a0022f(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_a0022f
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_a0022f
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_a0022f
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl
index 877ebc6..69cc4ce 100644
--- a/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a0f96e.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a0f96e(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a1352c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl
index 877ebc6..b60a8c2 100644
--- a/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a1352c.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a1352c(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a14041.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl
index 0d50008..9d4c6ce 100644
--- a/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a14041.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a14041(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a14041 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rgba32sint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a14041(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a14041
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a14041
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a14041
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl
index 877ebc6..cd02e8a 100644
--- a/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a165b8.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a165b8(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a19a12.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl
index 22c4ace..76b8746 100644
--- a/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a19a12.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a19a12(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a19a12 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rgba32uint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a19a12(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a19a12
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a19a12
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a19a12
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl
index 3fceba8..8934b79 100644
--- a/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a24491.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a24491(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a24491 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rgba32uint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a24491(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a24491
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a24491
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a24491
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl
index 877ebc6..0eab1b8 100644
--- a/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a4c338.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a4c338(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a5b88e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl
index 358786b..5be22ee 100644
--- a/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a5b88e.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a5b88e(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a5b88e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rgba16sint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a5b88e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a5b88e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a5b88e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a5b88e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl
index 5826dcd..5eafd9a 100644
--- a/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a5c925.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a5c925(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a5c925 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rgba8sint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a5c925(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a5c925
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a5c925
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a5c925
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl
index 877ebc6..6b9f23a 100644
--- a/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a5e80d.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a5e80d(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a66ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl
index ed7a079..270a7a3 100644
--- a/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a66ca4.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a66ca4(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a66ca4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a66ca4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a66ca4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a66ca4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a66ca4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl
index 877ebc6..9217a43 100644
--- a/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a6a986.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a6a986(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a6e78f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl
index 877ebc6..2b23ed4 100644
--- a/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a6e78f.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a6e78f(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/a702b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl
index 22dddfcd..275200e 100644
--- a/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a702b6.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a702b6(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a702b6 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a702b6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_a702b6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_a702b6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_a702b6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl
index ec8286d..4d66064 100644
--- a/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a7fc47.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a7fc47(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a7fc47 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<r8unorm, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a7fc47(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a7fc47
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a7fc47
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a7fc47
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl
index c17d72f..231f426 100644
--- a/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a9298c.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_a9298c(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_a9298c = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rg32uint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_a9298c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_a9298c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_a9298c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_a9298c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl
index 877ebc6..1dc29fd 100644
--- a/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/a9426c.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_a9426c(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ab03b6.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl
index 53e75cc..22d9b3d 100644
--- a/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ab03b6.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ab03b6(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ab03b6 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rgba8uint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ab03b6(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_ab03b6
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_ab03b6
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_ab03b6
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl
index 8fc165a..6ae08e9 100644
--- a/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ab788e.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ab788e(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ab788e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rg32float, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ab788e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_ab788e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_ab788e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_ab788e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl
index 290374d..74c438f 100644
--- a/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/abdd21.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_abdd21(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_abdd21 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_abdd21(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_abdd21
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_abdd21
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_abdd21
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl
index 3efd58c..655b700 100644
--- a/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ac0a55.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ac0a55(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ac0a55 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ac0a55(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_ac0a55
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_ac0a55
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_ac0a55
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl
index 877ebc6..166fa2c 100644
--- a/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ac67aa.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_ac67aa(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ae6a2a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ae6a2a.wgsl.expected.ir.msl
index 1173988..6b86c07 100644
--- a/test/tint/builtins/gen/var/textureStore/ae6a2a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ae6a2a.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ae6a2a(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ae6a2a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r8unorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ae6a2a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_ae6a2a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_ae6a2a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_ae6a2a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl
index 877ebc6..140e1b6 100644
--- a/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/aeb38a.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_aeb38a(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/aedea3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl
index 15c86a2..b565b07 100644
--- a/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/aedea3.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_aedea3(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_aedea3 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_aedea3(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_aedea3
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_aedea3
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_aedea3
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl
index d929329..31d0a7f 100644
--- a/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b16110.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b16110(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b16110 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b16110(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_b16110
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_b16110
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_b16110
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl
index 258e7bd..57e2309 100644
--- a/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b286b4.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b286b4(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b286b4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b286b4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_b286b4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_b286b4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_b286b4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl
index 779c300..63c089b 100644
--- a/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b36bc1.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b36bc1(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b36bc1 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rgba8uint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b36bc1(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_b36bc1
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_b36bc1
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_b36bc1
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl
index 877ebc6..b7625c5 100644
--- a/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b42fd3.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_b42fd3(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/b4389e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl
index c5974ca..722b1b4 100644
--- a/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b4389e.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b4389e(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b4389e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<bgra8unorm, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b4389e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_b4389e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_b4389e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_b4389e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl
index 877ebc6..d27f542 100644
--- a/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b706b1.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_b706b1(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/b70ded.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl
index 877ebc6..f204794 100644
--- a/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b70ded.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_b70ded(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/b71c13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl
index c382699..e8e3080 100644
--- a/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b71c13.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b71c13(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b71c13 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rg32float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b71c13(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_b71c13
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_b71c13
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_b71c13
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl
index 3ed1419..22557ab 100644
--- a/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b7232c.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b7232c(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b7232c = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_1d<r32float, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b7232c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_b7232c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_b7232c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_b7232c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl
index 877ebc6..1d1c7d5 100644
--- a/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b76ff3.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_b76ff3(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/b77161.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl
index 877ebc6..3163c3b 100644
--- a/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b77161.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_b77161(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/b89ffb.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl
index 2132dfa..e6df315 100644
--- a/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b89ffb.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b89ffb(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b89ffb = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b89ffb(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_b89ffb
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_b89ffb
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_b89ffb
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl
index 877ebc6..322d669 100644
--- a/test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b91b86.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_b91b86(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/b9c81a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl
index d5d067c..998dd58 100644
--- a/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b9c81a.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b9c81a(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b9c81a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rg32uint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b9c81a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_b9c81a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_b9c81a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_b9c81a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl
index fe8edf3..b66e583 100644
--- a/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/b9d863.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_b9d863(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_b9d863 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_b9d863(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_b9d863
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_b9d863
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_b9d863
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl
index 877ebc6..3f2c4cf 100644
--- a/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bbcb7f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_bbcb7f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/bc1423.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl
index 4053435..5908e18 100644
--- a/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bc1423.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_bc1423(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_bc1423 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_bc1423(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_bc1423
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_bc1423
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_bc1423
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl
index 40aaf04..6eb6244 100644
--- a/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bcc97a.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_bcc97a(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_bcc97a = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<r32sint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_bcc97a(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_bcc97a
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_bcc97a
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_bcc97a
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl
index 4a04008..01a36b9 100644
--- a/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bd6602.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_bd6602(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_bd6602 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rg32uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_bd6602(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_bd6602
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_bd6602
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_bd6602
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl
index 877ebc6..3de57ec 100644
--- a/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/be6e30.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_be6e30(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/bedbfc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl
index 877ebc6..f15fec3 100644
--- a/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bedbfc.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_bedbfc(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/bf775c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl
index 877ebc6..87f897f 100644
--- a/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/bf775c.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_bf775c(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/c06463.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl
index c1bfa49..93b5583 100644
--- a/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c06463.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c06463(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c06463 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<bgra8unorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c06463(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_c06463
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_c06463
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_c06463
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl
index 9664c4e..b106734 100644
--- a/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c1c664.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c1c664(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c1c664 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba32float, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c1c664(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_c1c664
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_c1c664
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_c1c664
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl
index 877ebc6..b455600 100644
--- a/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c1f29e.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_c1f29e(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/c1f760.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl
index 0c47a39..03ee4b2 100644
--- a/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c1f760.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c1f760(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c1f760 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c1f760(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_c1f760
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_c1f760
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_c1f760
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl
index 877ebc6..838103e 100644
--- a/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c2ca46.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_c2ca46(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/c32905.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl
index 877ebc6..54c74cf 100644
--- a/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c32905.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_c32905(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/c33478.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl
index f692c7a..dafab7d 100644
--- a/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c33478.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c33478(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c33478 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rg32float, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c33478(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_c33478
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_c33478
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_c33478
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl
index fedc056..be48f9a 100644
--- a/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c35268.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c35268(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c35268 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<r32uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c35268(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_c35268
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_c35268
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_c35268
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl
index 877ebc6..d55a1e5 100644
--- a/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c5af1e.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_c5af1e(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/c63f05.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl
index fa0aeb6..d29605c 100644
--- a/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c63f05.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c63f05(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c63f05 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c63f05(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_c63f05
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_c63f05
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_c63f05
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl
index c549203..d9a3cbf 100644
--- a/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c79451.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_c79451(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_c79451 = func():void {
-  $B2: {
-    %arg_1:ptr<function, u32, read_write> = var, 1u
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rgba16sint, read_write> = load %arg_0
-    %6:u32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_c79451(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_c79451
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_c79451
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_c79451
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl
index 877ebc6..a471ef82 100644
--- a/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c863be.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_c863be(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  int const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/c9d780.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl
index 877ebc6..cef71a1 100644
--- a/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/c9d780.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_c9d780(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/cb3b0b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl
index 877ebc6..400cfa1 100644
--- a/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/cb3b0b.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_cb3b0b(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ccac20.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl
index f5d4d71..8eb3efa 100644
--- a/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ccac20.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ccac20(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ccac20 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba32float, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ccac20(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_ccac20
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_ccac20
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_ccac20
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl
index 877ebc6..388b70a 100644
--- a/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/cd6755.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_cd6755(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ceb832.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl
index a2cddf8..d10b5f0b 100644
--- a/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ceb832.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ceb832(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ceb832 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<r32sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ceb832(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_ceb832
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_ceb832
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_ceb832
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl
index 8a8aeae5..b347784 100644
--- a/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d0d62c.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_d0d62c(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_d0d62c = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_2d<rgba8uint, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d0d62c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_d0d62c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_d0d62c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_d0d62c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl
index 93b597d..873d45f 100644
--- a/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d0fadc.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_d0fadc(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_d0fadc = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d0fadc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_d0fadc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_d0fadc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_d0fadc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl
index 9731f92..8d163e7 100644
--- a/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d19db4.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_d19db4(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_d19db4 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<rg32sint, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d19db4(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_d19db4
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_d19db4
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_d19db4
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl
index dbf2afd..f274d1b 100644
--- a/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d1ab82.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_d1ab82(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_d1ab82 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba8unorm, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d1ab82(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_d1ab82
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_d1ab82
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_d1ab82
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl
index 877ebc6..fa30962 100644
--- a/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d26166.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_d26166(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/d2b565.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl
index 877ebc6..d4251fb 100644
--- a/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d2b565.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_d2b565(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/d3a22b.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl
index b549a6d..8a6c470 100644
--- a/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d3a22b.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_d3a22b(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_d3a22b = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_3d<rgba32uint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d3a22b(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_d3a22b
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_d3a22b
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_d3a22b
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl
index 877ebc6..7531e28 100644
--- a/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d4aa95.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_d4aa95(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/d55e65.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl
index 877ebc6..bb36ac6 100644
--- a/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d55e65.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_d55e65(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/d73b5c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl
index 877ebc6..56b0acf 100644
--- a/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d73b5c.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_d73b5c(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/d82b0a.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl
index 877ebc6..118dfdd 100644
--- a/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d82b0a.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_d82b0a(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/d86d33.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl
index 55e1d40..75955be 100644
--- a/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/d86d33.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_d86d33(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_d86d33 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8snorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_d86d33(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_d86d33
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_d86d33
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_d86d33
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl
index 4119885..6a51f1c 100644
--- a/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/da530c.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_da530c(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_da530c = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_2d<rgba8sint, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_da530c(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_da530c
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_da530c
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_da530c
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl
index 1e12a3d..9042c5a 100644
--- a/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/db5128.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_db5128(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_db5128 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba16uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_db5128(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_db5128
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_db5128
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_db5128
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl
index 877ebc6..5ed77da 100644
--- a/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/db92a2.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_db92a2(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/dce0e2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl
index cf76d73..1f219c2 100644
--- a/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dce0e2.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<r32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_dce0e2(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_dce0e2 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<r32float, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_dce0e2(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_dce0e2
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_dce0e2
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_dce0e2
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl
index 877ebc6..704cb10 100644
--- a/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dd7d81.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_dd7d81(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/dd8b29.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl
index 3609c74..3a8b382 100644
--- a/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dd8b29.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_dd8b29(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_dd8b29 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba8uint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_dd8b29(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_dd8b29
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_dd8b29
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_dd8b29
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl
index 877ebc6..0de8d3e 100644
--- a/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dde364.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_dde364(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  int const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/de38e5.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl
index e86a4f9..573a6da 100644
--- a/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/de38e5.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_de38e5(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_de38e5 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<rgba8snorm, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_de38e5(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_de38e5
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_de38e5
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_de38e5
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl
index 877ebc6..b5b7d36 100644
--- a/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/de4b94.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_de4b94(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/df0c51.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl
index fa083ce..eee0db1 100644
--- a/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/df0c51.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_df0c51(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_df0c51 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<u32>, read_write> = var, vec3<u32>(1u)
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_3d<r32sint, read_write> = load %arg_0
-    %6:vec3<u32> = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_df0c51(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_df0c51
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_df0c51
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_df0c51
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl
index 877ebc6..73d2fd0 100644
--- a/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/df2ca4.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_df2ca4(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/dfa9a1.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl
index 877ebc6..b159258 100644
--- a/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dfa9a1.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_dfa9a1(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/dffb13.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl
index 877ebc6..b98ce0b 100644
--- a/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/dffb13.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_dffb13(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/e077e7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl
index 3778928..7fe954f 100644
--- a/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e077e7.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_e077e7(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_e077e7 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rg32sint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e077e7(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_e077e7
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_e077e7
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_e077e7
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl
index 877ebc6..41c39f3f 100644
--- a/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e0b666.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_e0b666(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/e1784d.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl
index 06d5068..a5d8e38 100644
--- a/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e1784d.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_e1784d(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_e1784d = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba32float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e1784d(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_e1784d
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_e1784d
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_e1784d
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl
index 877ebc6..f540179 100644
--- a/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e38281.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_e38281(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/e46fd8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl
index 48ef92f..d45c0b8 100644
--- a/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e46fd8.wgsl.expected.ir.msl
@@ -1,43 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<bgra8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_e46fd8(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_e46fd8 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<bgra8unorm, read_write> = load %arg_0
-    %6:vec2<u32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e46fd8(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_e46fd8
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_e46fd8
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_e46fd8
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl
index 2c62ba2..4087351 100644
--- a/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e72bdc.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba16float, read_write>, read> = var @binding_point(1, 0)
+void textureStore_e72bdc(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  uint const v = arg_2;
+  float4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_e72bdc = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba16float, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e72bdc(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_e72bdc
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_e72bdc
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_e72bdc
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl
index 877ebc6..a8e57c3 100644
--- a/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e7c6d8.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_e7c6d8(tint_module_vars_struct tint_module_vars) {
+  uint arg_1 = 1u;
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/e87f6e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl
index 4b22641..4dff33b 100644
--- a/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e87f6e.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_e87f6e(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_e87f6e = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<rgba16sint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_e87f6e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_e87f6e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_e87f6e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_e87f6e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl
index 877ebc6..bd26d33 100644
--- a/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e885e8.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_e885e8(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/e8cbf7.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl
index 877ebc6..3f01f088 100644
--- a/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/e8cbf7.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_e8cbf7(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint4 arg_2 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ea30d2.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl
index 62be2a5..4204046 100644
--- a/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ea30d2.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rg32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ea30d2(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ea30d2 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rg32sint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ea30d2(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_ea30d2
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_ea30d2
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_ea30d2
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl
index 877ebc6..df2406c 100644
--- a/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/eb702f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_eb702f(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/eb78b9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl
index 877ebc6..a68d4d4 100644
--- a/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/eb78b9.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_eb78b9(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ed6198.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ed6198.wgsl.expected.ir.msl
index ca81700..98816b7 100644
--- a/test/tint/builtins/gen/var/textureStore/ed6198.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ed6198.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_3d<r8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ed6198(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ed6198 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec3<i32>, read_write> = var, vec3<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_3d<r8unorm, read_write> = load %arg_0
-    %6:vec3<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ed6198(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_ed6198
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_ed6198
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_ed6198
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl
index 877ebc6..03d2e1a 100644
--- a/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ee6acc.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_ee6acc(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ef9f2f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl
index 877ebc6..e93739e 100644
--- a/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ef9f2f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_ef9f2f(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/f05928.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl
index f8f8682..ca25232 100644
--- a/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f05928.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_f05928(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  int4 arg_3 = int4(1);
+  uint const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_f05928 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, u32, read_write> = var, 1u
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:u32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f05928(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_f05928
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_f05928
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_f05928
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl
index 877ebc6..6410612 100644
--- a/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f1e6d3.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_f1e6d3(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  int4 arg_2 = int4(1);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/f64d69.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl
index 485768a..8ebe5b6 100644
--- a/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f64d69.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<r32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_f64d69(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  int4 arg_2 = int4(1);
+  int4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_f64d69 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %5:texture_storage_1d<r32sint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<i32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f64d69(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_f64d69
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_f64d69
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_f64d69
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl
index 145d90c..7d199af 100644
--- a/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f6f392.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba8unorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_f6f392(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_f6f392 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %6:texture_storage_2d_array<rgba8unorm, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<f32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f6f392(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_f6f392
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_f6f392
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_f6f392
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl
index 877ebc6..0f89d87 100644
--- a/test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f7b0ab.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_f7b0ab(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  uint arg_2 = 1u;
+  float4 arg_3 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/f8aaf9.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl
index 1ed0c01..ed2406a 100644
--- a/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f8aaf9.wgsl.expected.ir.msl
@@ -1,45 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32sint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_f8aaf9(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_f8aaf9 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(1i)
-    %6:texture_storage_2d_array<rgba32sint, read_write> = load %arg_0
-    %7:vec2<i32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<i32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f8aaf9(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_f8aaf9
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_f8aaf9
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_f8aaf9
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl
index 877ebc6..30eab94 100644
--- a/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f8dead.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_f8dead(tint_module_vars_struct tint_module_vars) {
+  int3 arg_1 = int3(1);
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint3(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/f975a0.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl
index 8c3de5d..b834ddb 100644
--- a/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f975a0.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d<rgba8snorm, read_write>, read> = var @binding_point(1, 0)
+void textureStore_f975a0(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  float4 arg_2 = float4(1.0f);
+  float4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint2(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_f975a0 = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
-    %arg_2:ptr<function, vec4<f32>, read_write> = var, vec4<f32>(1.0f)
-    %5:texture_storage_2d<rgba8snorm, read_write> = load %arg_0
-    %6:vec2<i32> = load %arg_1
-    %7:vec4<f32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_f975a0(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_f975a0
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_f975a0
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_f975a0
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl
index 877ebc6..b79c5ed 100644
--- a/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/f9be83.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_f9be83(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/fb9a8f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl
index 877ebc6..afdf164 100644
--- a/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fb9a8f.wgsl.expected.ir.msl
@@ -1,9 +1,31 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_fb9a8f(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/fbf53f.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl
index 877ebc6..44285f2 100644
--- a/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fbf53f.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<int, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_fbf53f(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  int arg_2 = 1;
+  int4 arg_3 = int4(1);
+  int const v = arg_2;
+  int4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/fc916e.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl
index 4453e5c..4504c52 100644
--- a/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fc916e.wgsl.expected.ir.msl
@@ -1,45 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_2d_array<rgba32uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_fc916e(tint_module_vars_struct tint_module_vars) {
+  uint2 arg_1 = uint2(1u);
+  int arg_2 = 1;
+  uint4 arg_3 = uint4(1u);
+  tint_module_vars.arg_0.write(arg_3, arg_1, arg_2);
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_fc916e = func():void {
-  $B2: {
-    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
-    %arg_2:ptr<function, i32, read_write> = var, 1i
-    %arg_3:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %6:texture_storage_2d_array<rgba32uint, read_write> = load %arg_0
-    %7:vec2<u32> = load %arg_1
-    %8:i32 = load %arg_2
-    %9:vec4<u32> = load %arg_3
-    %10:void = textureStore %6, %7, %8, %9
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_fc916e(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %12:void = call %textureStore_fc916e
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %14:void = call %textureStore_fc916e
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %16:void = call %textureStore_fc916e
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl
index 877ebc6..85d5404 100644
--- a/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fcbe66.wgsl.expected.ir.msl
@@ -1,9 +1,30 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture3d<float, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_fcbe66(tint_module_vars_struct tint_module_vars) {
+  uint3 arg_1 = uint3(1u);
+  float4 arg_2 = float4(1.0f);
+  tint_module_vars.arg_0.write(arg_2, arg_1);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/fd350c.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl
index 877ebc6..5c325d1 100644
--- a/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/fd350c.wgsl.expected.ir.msl
@@ -1,9 +1,33 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d_array<uint, access::write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void textureStore_fd350c(tint_module_vars_struct tint_module_vars) {
+  int2 arg_1 = int2(1);
+  uint arg_2 = 1u;
+  uint4 arg_3 = uint4(1u);
+  uint const v = arg_2;
+  uint4 const v_1 = arg_3;
+  tint_module_vars.arg_0.write(v_1, uint2(arg_1), v);
+}
+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);
+}
+kernel void compute_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);
+}
+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/var/textureStore/ff23b3.wgsl.expected.ir.msl b/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl
index ce9e3bb..fd9b918 100644
--- a/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl
+++ b/test/tint/builtins/gen/var/textureStore/ff23b3.wgsl.expected.ir.msl
@@ -1,43 +1,32 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture1d<uint, access::read_write> arg_0;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %arg_0:ptr<handle, texture_storage_1d<rgba16uint, read_write>, read> = var @binding_point(1, 0)
+void textureStore_ff23b3(tint_module_vars_struct tint_module_vars) {
+  int arg_1 = 1;
+  uint4 arg_2 = uint4(1u);
+  uint4 const v = arg_2;
+  tint_module_vars.arg_0.write(v, uint(arg_1));
+  tint_module_vars.arg_0.fence();
 }
-
-%textureStore_ff23b3 = func():void {
-  $B2: {
-    %arg_1:ptr<function, i32, read_write> = var, 1i
-    %arg_2:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(1u)
-    %5:texture_storage_1d<rgba16uint, read_write> = load %arg_0
-    %6:i32 = load %arg_1
-    %7:vec4<u32> = load %arg_2
-    %8:void = textureStore %5, %6, %7
-    ret
-  }
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  textureStore_ff23b3(tint_module_vars);
+  return float4(0.0f);
 }
-%vertex_main = @vertex func():vec4<f32> [@position] {
-  $B3: {
-    %10:void = call %textureStore_ff23b3
-    ret vec4<f32>(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);
 }
-%fragment_main = @fragment func():void {
-  $B4: {
-    %12:void = call %textureStore_ff23b3
-    ret
-  }
+kernel void compute_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);
 }
-%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
-  $B5: {
-    %14:void = call %textureStore_ff23b3
-    ret
-  }
+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)};
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl b/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl
index 877ebc6..951963d 100644
--- a/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureStore/bgraunorm.wgsl.expected.ir.msl
@@ -1,9 +1,18 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<float, access::write> tex;
+};
+struct vertex_main_outputs {
+  float4 tint_symbol [[position]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:924 internal compiler error: TINT_UNREACHABLE unhandled: textureStore
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
+  float4 const value = float4(1.0f, 2.0f, 3.0f, 4.0f);
+  tint_module_vars.tex.write(value, uint2(int2(9, 8)));
+  return float4(0.0f);
+}
+vertex vertex_main_outputs vertex_main(texture2d<float, access::write> tex [[texture(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.tex=tex};
+  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
+}
diff --git a/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl b/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl
index d480901..c046280 100644
--- a/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl
+++ b/test/tint/builtins/textureStore/loop_continuing_read_write_texture.wgsl.expected.ir.msl
@@ -1,43 +1,22 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_module_vars_struct {
+  texture2d<int, access::read_write> tex;
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:1164 internal compiler error: $B1: {  # root
-  %tex:ptr<handle, texture_storage_2d<r32sint, read_write>, read> = var @binding_point(0, 2)
-}
-
-%foo = func():void {
-  $B2: {
-    loop [i: $B3, b: $B4, c: $B5] {  # loop_1
-      $B3: {  # initializer
-        %i:ptr<function, i32, read_write> = var, 0i
-        next_iteration  # -> $B4
+void foo(tint_module_vars_struct tint_module_vars) {
+  {
+    int i = 0;
+    while(true) {
+      if ((i < 3)) {
+      } else {
+        break;
       }
-      $B4: {  # body
-        %4:i32 = load %i
-        %5:bool = lt %4, 3i
-        if %5 [t: $B6, f: $B7] {  # if_1
-          $B6: {  # true
-            exit_if  # if_1
-          }
-          $B7: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B5
+      {
+        tint_module_vars.tex.write(int4(0), uint2(int2(0)));
+        tint_module_vars.tex.fence();
       }
-      $B5: {  # continuing
-        %6:texture_storage_2d<r32sint, read_write> = load %tex
-        %7:void = textureStore %6, vec2<i32>(0i), vec4<i32>(0i)
-        next_iteration  # -> $B4
-      }
+      continue;
     }
-    ret
   }
 }
-
-invalid access control for storage texture
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************