[ir] Fix consecutive calls in dependency scanner

Functions called multiple times by the same function were being added
to the ordered list multiple time. Use a UniqueVector to prevent this.

Change-Id: I634720bd0c4ec50a847d2e52179a174de68568c4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/191100
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/core/ir/module.cc b/src/tint/lang/core/ir/module.cc
index 49af3bb..617f00d 100644
--- a/src/tint/lang/core/ir/module.cc
+++ b/src/tint/lang/core/ir/module.cc
@@ -43,7 +43,7 @@
 template <typename F>
 struct FunctionSorter {
     /// The dependency-ordered list of functions.
-    Vector<F*, 16> ordered_functions{};
+    UniqueVector<F*, 16> ordered_functions{};
 
     /// The functions that have been visited and checked for dependencies.
     Hashset<F*, 16> visited{};
@@ -70,7 +70,7 @@
             // unvisited dependencies. We can now add it to the ordered list, and walk back down the
             // stack until we find the next unvisited function.
             while (!function_stack.IsEmpty() && visited.Contains(function_stack.Back())) {
-                ordered_functions.Push(function_stack.Pop());
+                ordered_functions.Add(function_stack.Pop());
             }
         }
     }
@@ -106,7 +106,7 @@
         for (auto& func : mod.functions) {
             sorter.Visit(func.Get());
         }
-        return std::move(sorter.ordered_functions);
+        return std::move(sorter.ordered_functions.Release());
     }
 };
 
diff --git a/src/tint/lang/core/ir/module_test.cc b/src/tint/lang/core/ir/module_test.cc
index b04ae70..21668df 100644
--- a/src/tint/lang/core/ir/module_test.cc
+++ b/src/tint/lang/core/ir/module_test.cc
@@ -68,6 +68,8 @@
         auto* ifelse = b.If(true);
         b.Append(ifelse->True(), [&] {
             b.Call(fc);
+            b.Call(fc);
+            b.Call(fc);
             b.ExitIf(ifelse);
         });
         b.Append(ifelse->False(), [&] {
diff --git a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.ir.msl b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.ir.msl
index 8dc4c3f..bcf0cf1 100644
--- a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.ir.msl
@@ -1,201 +1,95 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec4_f32:vec4<f32> @offset(96)
-  vec4_i32:vec4<i32> @offset(112)
-  vec4_u32:vec4<u32> @offset(128)
-  mat2x2_f32:mat2x2<f32> @offset(144)
-  mat2x3_f32:mat2x3<f32> @offset(160)
-  mat2x4_f32:mat2x4<f32> @offset(192)
-  mat3x2_f32:mat3x2<f32> @offset(224)
-  mat3x3_f32:mat3x3<f32> @offset(256)
-  mat3x4_f32:mat3x4<f32> @offset(304)
-  mat4x2_f32:mat4x2<f32> @offset(352)
-  mat4x3_f32:mat4x3<f32> @offset(384)
-  mat4x4_f32:mat4x4<f32> @offset(448)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(512)
-}
+struct Inner {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  tint_array<float3, 2> arr2_vec3_f32;
+};
+struct S {
+  tint_array<Inner, 1> arr;
+};
+struct tint_module_vars_struct {
+  const device S* sb;
+  device int* s;
+};
 
-S = struct @align(16) {
-  arr:array<Inner> @offset(0)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-$B1: {  # root
-  %sb:ptr<storage, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+void tint_symbol_inner(uint idx, tint_module_vars_struct tint_module_vars) {
+  float const scalar_f32 = (*tint_module_vars.sb).arr[idx].scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.sb).arr[idx].scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.sb).arr[idx].scalar_u32;
+  float2 const vec2_f32 = (*tint_module_vars.sb).arr[idx].vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.sb).arr[idx].vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.sb).arr[idx].vec2_u32;
+  float3 const vec3_f32 = (*tint_module_vars.sb).arr[idx].vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.sb).arr[idx].vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.sb).arr[idx].vec3_u32;
+  float4 const vec4_f32 = (*tint_module_vars.sb).arr[idx].vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.sb).arr[idx].vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.sb).arr[idx].vec4_u32;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.sb).arr[idx].mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.sb).arr[idx].mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.sb).arr[idx].mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.sb).arr[idx].mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.sb).arr[idx].mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.sb).arr[idx].mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.sb).arr[idx].mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.sb).arr[idx].mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.sb).arr[idx].mat4x4_f32;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.sb).arr[idx].arr2_vec3_f32;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = ((v_1 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_3 = (v_2 + int(vec2_u32[0u]));
+  int const v_4 = ((v_3 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_5 = (v_4 + int(vec3_u32[1u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_7 = (v_6 + int(vec4_u32[2u]));
+  int const v_8 = (v_7 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_9 = (v_8 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_10 = (v_9 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_11 = (v_10 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  (*tint_module_vars.s) = (v_16 + tint_f32_to_i32(arr2_vec3_f32[0][0u]));
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
-  $B2: {
-    %5:ptr<storage, f32, read> = access %sb, 0u, %idx, 0u
-    %6:f32 = load %5
-    %scalar_f32:f32 = let %6
-    %8:ptr<storage, i32, read> = access %sb, 0u, %idx, 1u
-    %9:i32 = load %8
-    %scalar_i32:i32 = let %9
-    %11:ptr<storage, u32, read> = access %sb, 0u, %idx, 2u
-    %12:u32 = load %11
-    %scalar_u32:u32 = let %12
-    %14:ptr<storage, vec2<f32>, read> = access %sb, 0u, %idx, 3u
-    %15:vec2<f32> = load %14
-    %vec2_f32:vec2<f32> = let %15
-    %17:ptr<storage, vec2<i32>, read> = access %sb, 0u, %idx, 4u
-    %18:vec2<i32> = load %17
-    %vec2_i32:vec2<i32> = let %18
-    %20:ptr<storage, vec2<u32>, read> = access %sb, 0u, %idx, 5u
-    %21:vec2<u32> = load %20
-    %vec2_u32:vec2<u32> = let %21
-    %23:ptr<storage, vec3<f32>, read> = access %sb, 0u, %idx, 6u
-    %24:vec3<f32> = load %23
-    %vec3_f32:vec3<f32> = let %24
-    %26:ptr<storage, vec3<i32>, read> = access %sb, 0u, %idx, 7u
-    %27:vec3<i32> = load %26
-    %vec3_i32:vec3<i32> = let %27
-    %29:ptr<storage, vec3<u32>, read> = access %sb, 0u, %idx, 8u
-    %30:vec3<u32> = load %29
-    %vec3_u32:vec3<u32> = let %30
-    %32:ptr<storage, vec4<f32>, read> = access %sb, 0u, %idx, 9u
-    %33:vec4<f32> = load %32
-    %vec4_f32:vec4<f32> = let %33
-    %35:ptr<storage, vec4<i32>, read> = access %sb, 0u, %idx, 10u
-    %36:vec4<i32> = load %35
-    %vec4_i32:vec4<i32> = let %36
-    %38:ptr<storage, vec4<u32>, read> = access %sb, 0u, %idx, 11u
-    %39:vec4<u32> = load %38
-    %vec4_u32:vec4<u32> = let %39
-    %41:ptr<storage, mat2x2<f32>, read> = access %sb, 0u, %idx, 12u
-    %42:mat2x2<f32> = load %41
-    %mat2x2_f32:mat2x2<f32> = let %42
-    %44:ptr<storage, mat2x3<f32>, read> = access %sb, 0u, %idx, 13u
-    %45:mat2x3<f32> = load %44
-    %mat2x3_f32:mat2x3<f32> = let %45
-    %47:ptr<storage, mat2x4<f32>, read> = access %sb, 0u, %idx, 14u
-    %48:mat2x4<f32> = load %47
-    %mat2x4_f32:mat2x4<f32> = let %48
-    %50:ptr<storage, mat3x2<f32>, read> = access %sb, 0u, %idx, 15u
-    %51:mat3x2<f32> = load %50
-    %mat3x2_f32:mat3x2<f32> = let %51
-    %53:ptr<storage, mat3x3<f32>, read> = access %sb, 0u, %idx, 16u
-    %54:mat3x3<f32> = load %53
-    %mat3x3_f32:mat3x3<f32> = let %54
-    %56:ptr<storage, mat3x4<f32>, read> = access %sb, 0u, %idx, 17u
-    %57:mat3x4<f32> = load %56
-    %mat3x4_f32:mat3x4<f32> = let %57
-    %59:ptr<storage, mat4x2<f32>, read> = access %sb, 0u, %idx, 18u
-    %60:mat4x2<f32> = load %59
-    %mat4x2_f32:mat4x2<f32> = let %60
-    %62:ptr<storage, mat4x3<f32>, read> = access %sb, 0u, %idx, 19u
-    %63:mat4x3<f32> = load %62
-    %mat4x3_f32:mat4x3<f32> = let %63
-    %65:ptr<storage, mat4x4<f32>, read> = access %sb, 0u, %idx, 20u
-    %66:mat4x4<f32> = load %65
-    %mat4x4_f32:mat4x4<f32> = let %66
-    %68:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 0u, %idx, 21u
-    %69:array<vec3<f32>, 2> = load %68
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %69
-    %71:i32 = call %tint_f32_to_i32, %scalar_f32
-    %73:i32 = add %71, %scalar_i32
-    %74:i32 = let %73
-    %75:i32 = convert %scalar_u32
-    %76:i32 = add %74, %75
-    %77:i32 = let %76
-    %78:f32 = access %vec2_f32, 0u
-    %79:i32 = call %tint_f32_to_i32, %78
-    %80:i32 = add %77, %79
-    %81:i32 = access %vec2_i32, 0u
-    %82:i32 = add %80, %81
-    %83:i32 = let %82
-    %84:u32 = access %vec2_u32, 0u
-    %85:i32 = convert %84
-    %86:i32 = add %83, %85
-    %87:i32 = let %86
-    %88:f32 = access %vec3_f32, 1u
-    %89:i32 = call %tint_f32_to_i32, %88
-    %90:i32 = add %87, %89
-    %91:i32 = access %vec3_i32, 1u
-    %92:i32 = add %90, %91
-    %93:i32 = let %92
-    %94:u32 = access %vec3_u32, 1u
-    %95:i32 = convert %94
-    %96:i32 = add %93, %95
-    %97:i32 = let %96
-    %98:f32 = access %vec4_f32, 2u
-    %99:i32 = call %tint_f32_to_i32, %98
-    %100:i32 = add %97, %99
-    %101:i32 = access %vec4_i32, 2u
-    %102:i32 = add %100, %101
-    %103:i32 = let %102
-    %104:u32 = access %vec4_u32, 2u
-    %105:i32 = convert %104
-    %106:i32 = add %103, %105
-    %107:i32 = let %106
-    %108:f32 = access %mat2x2_f32, 0i, 0u
-    %109:i32 = call %tint_f32_to_i32, %108
-    %110:i32 = add %107, %109
-    %111:i32 = let %110
-    %112:f32 = access %mat2x3_f32, 0i, 0u
-    %113:i32 = call %tint_f32_to_i32, %112
-    %114:i32 = add %111, %113
-    %115:i32 = let %114
-    %116:f32 = access %mat2x4_f32, 0i, 0u
-    %117:i32 = call %tint_f32_to_i32, %116
-    %118:i32 = add %115, %117
-    %119:i32 = let %118
-    %120:f32 = access %mat3x2_f32, 0i, 0u
-    %121:i32 = call %tint_f32_to_i32, %120
-    %122:i32 = add %119, %121
-    %123:i32 = let %122
-    %124:f32 = access %mat3x3_f32, 0i, 0u
-    %125:i32 = call %tint_f32_to_i32, %124
-    %126:i32 = add %123, %125
-    %127:i32 = let %126
-    %128:f32 = access %mat3x4_f32, 0i, 0u
-    %129:i32 = call %tint_f32_to_i32, %128
-    %130:i32 = add %127, %129
-    %131:i32 = let %130
-    %132:f32 = access %mat4x2_f32, 0i, 0u
-    %133:i32 = call %tint_f32_to_i32, %132
-    %134:i32 = add %131, %133
-    %135:i32 = let %134
-    %136:f32 = access %mat4x3_f32, 0i, 0u
-    %137:i32 = call %tint_f32_to_i32, %136
-    %138:i32 = add %135, %137
-    %139:i32 = let %138
-    %140:f32 = access %mat4x4_f32, 0i, 0u
-    %141:i32 = call %tint_f32_to_i32, %140
-    %142:i32 = add %139, %141
-    %143:i32 = let %142
-    %144:f32 = access %arr2_vec3_f32, 0i, 0u
-    %145:i32 = call %tint_f32_to_i32, %144
-    %146:i32 = add %143, %145
-    store %s, %146
-    ret
-  }
+kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], const device S* sb [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb=sb, .s=s};
+  tint_symbol_inner(idx, tint_module_vars);
 }
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %148:i32 = convert %value
-    %149:bool = gte %value, -2147483648.0f
-    %150:i32 = select -2147483648i, %148, %149
-    %151:bool = lte %value, 2147483520.0f
-    %152:i32 = select 2147483647i, %150, %151
-    ret %152
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.ir.msl
index 804b368..0ad8507 100644
--- a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.ir.msl
@@ -1,322 +1,140 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  scalar_f16:f16 @offset(12)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec2_f16:vec2<f16> @offset(40)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec3_f16:vec3<f16> @offset(96)
-  vec4_f32:vec4<f32> @offset(112)
-  vec4_i32:vec4<i32> @offset(128)
-  vec4_u32:vec4<u32> @offset(144)
-  vec4_f16:vec4<f16> @offset(160)
-  mat2x2_f32:mat2x2<f32> @offset(168)
-  mat2x3_f32:mat2x3<f32> @offset(192)
-  mat2x4_f32:mat2x4<f32> @offset(224)
-  mat3x2_f32:mat3x2<f32> @offset(256)
-  mat3x3_f32:mat3x3<f32> @offset(288)
-  mat3x4_f32:mat3x4<f32> @offset(336)
-  mat4x2_f32:mat4x2<f32> @offset(384)
-  mat4x3_f32:mat4x3<f32> @offset(416)
-  mat4x4_f32:mat4x4<f32> @offset(480)
-  mat2x2_f16:mat2x2<f16> @offset(544)
-  mat2x3_f16:mat2x3<f16> @offset(552)
-  mat2x4_f16:mat2x4<f16> @offset(568)
-  mat3x2_f16:mat3x2<f16> @offset(584)
-  mat3x3_f16:mat3x3<f16> @offset(600)
-  mat3x4_f16:mat3x4<f16> @offset(624)
-  mat4x2_f16:mat4x2<f16> @offset(648)
-  mat4x3_f16:mat4x3<f16> @offset(664)
-  mat4x4_f16:mat4x4<f16> @offset(696)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(736)
-  arr2_mat4x2_f16:array<mat4x2<f16>, 2> @offset(768)
-}
+struct Inner {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  half scalar_f16;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  half2 vec2_f16;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  half3 vec3_f16;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  half4 vec4_f16;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  half2x2 mat2x2_f16;
+  half2x3 mat2x3_f16;
+  half2x4 mat2x4_f16;
+  half3x2 mat3x2_f16;
+  half3x3 mat3x3_f16;
+  half3x4 mat3x4_f16;
+  half4x2 mat4x2_f16;
+  half4x3 mat4x3_f16;
+  half4x4 mat4x4_f16;
+  tint_array<float3, 2> arr2_vec3_f32;
+  tint_array<half4x2, 2> arr2_mat4x2_f16;
+};
+struct S {
+  tint_array<Inner, 1> arr;
+};
+struct tint_module_vars_struct {
+  const device S* sb;
+  device int* s;
+};
 
-S = struct @align(16) {
-  arr:array<Inner> @offset(0)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-$B1: {  # root
-  %sb:ptr<storage, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+int tint_f16_to_i32(half value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -65504.0h)), (value <= 65504.0h));
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
-  $B2: {
-    %5:ptr<storage, f32, read> = access %sb, 0u, %idx, 0u
-    %6:f32 = load %5
-    %scalar_f32:f32 = let %6
-    %8:ptr<storage, i32, read> = access %sb, 0u, %idx, 1u
-    %9:i32 = load %8
-    %scalar_i32:i32 = let %9
-    %11:ptr<storage, u32, read> = access %sb, 0u, %idx, 2u
-    %12:u32 = load %11
-    %scalar_u32:u32 = let %12
-    %14:ptr<storage, f16, read> = access %sb, 0u, %idx, 3u
-    %15:f16 = load %14
-    %scalar_f16:f16 = let %15
-    %17:ptr<storage, vec2<f32>, read> = access %sb, 0u, %idx, 4u
-    %18:vec2<f32> = load %17
-    %vec2_f32:vec2<f32> = let %18
-    %20:ptr<storage, vec2<i32>, read> = access %sb, 0u, %idx, 5u
-    %21:vec2<i32> = load %20
-    %vec2_i32:vec2<i32> = let %21
-    %23:ptr<storage, vec2<u32>, read> = access %sb, 0u, %idx, 6u
-    %24:vec2<u32> = load %23
-    %vec2_u32:vec2<u32> = let %24
-    %26:ptr<storage, vec2<f16>, read> = access %sb, 0u, %idx, 7u
-    %27:vec2<f16> = load %26
-    %vec2_f16:vec2<f16> = let %27
-    %29:ptr<storage, vec3<f32>, read> = access %sb, 0u, %idx, 8u
-    %30:vec3<f32> = load %29
-    %vec3_f32:vec3<f32> = let %30
-    %32:ptr<storage, vec3<i32>, read> = access %sb, 0u, %idx, 9u
-    %33:vec3<i32> = load %32
-    %vec3_i32:vec3<i32> = let %33
-    %35:ptr<storage, vec3<u32>, read> = access %sb, 0u, %idx, 10u
-    %36:vec3<u32> = load %35
-    %vec3_u32:vec3<u32> = let %36
-    %38:ptr<storage, vec3<f16>, read> = access %sb, 0u, %idx, 11u
-    %39:vec3<f16> = load %38
-    %vec3_f16:vec3<f16> = let %39
-    %41:ptr<storage, vec4<f32>, read> = access %sb, 0u, %idx, 12u
-    %42:vec4<f32> = load %41
-    %vec4_f32:vec4<f32> = let %42
-    %44:ptr<storage, vec4<i32>, read> = access %sb, 0u, %idx, 13u
-    %45:vec4<i32> = load %44
-    %vec4_i32:vec4<i32> = let %45
-    %47:ptr<storage, vec4<u32>, read> = access %sb, 0u, %idx, 14u
-    %48:vec4<u32> = load %47
-    %vec4_u32:vec4<u32> = let %48
-    %50:ptr<storage, vec4<f16>, read> = access %sb, 0u, %idx, 15u
-    %51:vec4<f16> = load %50
-    %vec4_f16:vec4<f16> = let %51
-    %53:ptr<storage, mat2x2<f32>, read> = access %sb, 0u, %idx, 16u
-    %54:mat2x2<f32> = load %53
-    %mat2x2_f32:mat2x2<f32> = let %54
-    %56:ptr<storage, mat2x3<f32>, read> = access %sb, 0u, %idx, 17u
-    %57:mat2x3<f32> = load %56
-    %mat2x3_f32:mat2x3<f32> = let %57
-    %59:ptr<storage, mat2x4<f32>, read> = access %sb, 0u, %idx, 18u
-    %60:mat2x4<f32> = load %59
-    %mat2x4_f32:mat2x4<f32> = let %60
-    %62:ptr<storage, mat3x2<f32>, read> = access %sb, 0u, %idx, 19u
-    %63:mat3x2<f32> = load %62
-    %mat3x2_f32:mat3x2<f32> = let %63
-    %65:ptr<storage, mat3x3<f32>, read> = access %sb, 0u, %idx, 20u
-    %66:mat3x3<f32> = load %65
-    %mat3x3_f32:mat3x3<f32> = let %66
-    %68:ptr<storage, mat3x4<f32>, read> = access %sb, 0u, %idx, 21u
-    %69:mat3x4<f32> = load %68
-    %mat3x4_f32:mat3x4<f32> = let %69
-    %71:ptr<storage, mat4x2<f32>, read> = access %sb, 0u, %idx, 22u
-    %72:mat4x2<f32> = load %71
-    %mat4x2_f32:mat4x2<f32> = let %72
-    %74:ptr<storage, mat4x3<f32>, read> = access %sb, 0u, %idx, 23u
-    %75:mat4x3<f32> = load %74
-    %mat4x3_f32:mat4x3<f32> = let %75
-    %77:ptr<storage, mat4x4<f32>, read> = access %sb, 0u, %idx, 24u
-    %78:mat4x4<f32> = load %77
-    %mat4x4_f32:mat4x4<f32> = let %78
-    %80:ptr<storage, mat2x2<f16>, read> = access %sb, 0u, %idx, 25u
-    %81:mat2x2<f16> = load %80
-    %mat2x2_f16:mat2x2<f16> = let %81
-    %83:ptr<storage, mat2x3<f16>, read> = access %sb, 0u, %idx, 26u
-    %84:mat2x3<f16> = load %83
-    %mat2x3_f16:mat2x3<f16> = let %84
-    %86:ptr<storage, mat2x4<f16>, read> = access %sb, 0u, %idx, 27u
-    %87:mat2x4<f16> = load %86
-    %mat2x4_f16:mat2x4<f16> = let %87
-    %89:ptr<storage, mat3x2<f16>, read> = access %sb, 0u, %idx, 28u
-    %90:mat3x2<f16> = load %89
-    %mat3x2_f16:mat3x2<f16> = let %90
-    %92:ptr<storage, mat3x3<f16>, read> = access %sb, 0u, %idx, 29u
-    %93:mat3x3<f16> = load %92
-    %mat3x3_f16:mat3x3<f16> = let %93
-    %95:ptr<storage, mat3x4<f16>, read> = access %sb, 0u, %idx, 30u
-    %96:mat3x4<f16> = load %95
-    %mat3x4_f16:mat3x4<f16> = let %96
-    %98:ptr<storage, mat4x2<f16>, read> = access %sb, 0u, %idx, 31u
-    %99:mat4x2<f16> = load %98
-    %mat4x2_f16:mat4x2<f16> = let %99
-    %101:ptr<storage, mat4x3<f16>, read> = access %sb, 0u, %idx, 32u
-    %102:mat4x3<f16> = load %101
-    %mat4x3_f16:mat4x3<f16> = let %102
-    %104:ptr<storage, mat4x4<f16>, read> = access %sb, 0u, %idx, 33u
-    %105:mat4x4<f16> = load %104
-    %mat4x4_f16:mat4x4<f16> = let %105
-    %107:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 0u, %idx, 34u
-    %108:array<vec3<f32>, 2> = load %107
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %108
-    %110:ptr<storage, array<mat4x2<f16>, 2>, read> = access %sb, 0u, %idx, 35u
-    %111:array<mat4x2<f16>, 2> = load %110
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = let %111
-    %113:i32 = call %tint_f32_to_i32, %scalar_f32
-    %115:i32 = add %113, %scalar_i32
-    %116:i32 = let %115
-    %117:i32 = convert %scalar_u32
-    %118:i32 = add %116, %117
-    %119:i32 = let %118
-    %120:i32 = call %tint_f16_to_i32, %scalar_f16
-    %122:i32 = add %119, %120
-    %123:i32 = let %122
-    %124:f32 = access %vec2_f32, 0u
-    %125:i32 = call %tint_f32_to_i32, %124
-    %126:i32 = add %123, %125
-    %127:i32 = access %vec2_i32, 0u
-    %128:i32 = add %126, %127
-    %129:i32 = let %128
-    %130:u32 = access %vec2_u32, 0u
-    %131:i32 = convert %130
-    %132:i32 = add %129, %131
-    %133:i32 = let %132
-    %134:f16 = access %vec2_f16, 0u
-    %135:i32 = call %tint_f16_to_i32, %134
-    %136:i32 = add %133, %135
-    %137:i32 = let %136
-    %138:f32 = access %vec3_f32, 1u
-    %139:i32 = call %tint_f32_to_i32, %138
-    %140:i32 = add %137, %139
-    %141:i32 = access %vec3_i32, 1u
-    %142:i32 = add %140, %141
-    %143:i32 = let %142
-    %144:u32 = access %vec3_u32, 1u
-    %145:i32 = convert %144
-    %146:i32 = add %143, %145
-    %147:i32 = let %146
-    %148:f16 = access %vec3_f16, 1u
-    %149:i32 = call %tint_f16_to_i32, %148
-    %150:i32 = add %147, %149
-    %151:i32 = let %150
-    %152:f32 = access %vec4_f32, 2u
-    %153:i32 = call %tint_f32_to_i32, %152
-    %154:i32 = add %151, %153
-    %155:i32 = access %vec4_i32, 2u
-    %156:i32 = add %154, %155
-    %157:i32 = let %156
-    %158:u32 = access %vec4_u32, 2u
-    %159:i32 = convert %158
-    %160:i32 = add %157, %159
-    %161:i32 = let %160
-    %162:f16 = access %vec4_f16, 2u
-    %163:i32 = call %tint_f16_to_i32, %162
-    %164:i32 = add %161, %163
-    %165:i32 = let %164
-    %166:f32 = access %mat2x2_f32, 0i, 0u
-    %167:i32 = call %tint_f32_to_i32, %166
-    %168:i32 = add %165, %167
-    %169:i32 = let %168
-    %170:f32 = access %mat2x3_f32, 0i, 0u
-    %171:i32 = call %tint_f32_to_i32, %170
-    %172:i32 = add %169, %171
-    %173:i32 = let %172
-    %174:f32 = access %mat2x4_f32, 0i, 0u
-    %175:i32 = call %tint_f32_to_i32, %174
-    %176:i32 = add %173, %175
-    %177:i32 = let %176
-    %178:f32 = access %mat3x2_f32, 0i, 0u
-    %179:i32 = call %tint_f32_to_i32, %178
-    %180:i32 = add %177, %179
-    %181:i32 = let %180
-    %182:f32 = access %mat3x3_f32, 0i, 0u
-    %183:i32 = call %tint_f32_to_i32, %182
-    %184:i32 = add %181, %183
-    %185:i32 = let %184
-    %186:f32 = access %mat3x4_f32, 0i, 0u
-    %187:i32 = call %tint_f32_to_i32, %186
-    %188:i32 = add %185, %187
-    %189:i32 = let %188
-    %190:f32 = access %mat4x2_f32, 0i, 0u
-    %191:i32 = call %tint_f32_to_i32, %190
-    %192:i32 = add %189, %191
-    %193:i32 = let %192
-    %194:f32 = access %mat4x3_f32, 0i, 0u
-    %195:i32 = call %tint_f32_to_i32, %194
-    %196:i32 = add %193, %195
-    %197:i32 = let %196
-    %198:f32 = access %mat4x4_f32, 0i, 0u
-    %199:i32 = call %tint_f32_to_i32, %198
-    %200:i32 = add %197, %199
-    %201:i32 = let %200
-    %202:f16 = access %mat2x2_f16, 0i, 0u
-    %203:i32 = call %tint_f16_to_i32, %202
-    %204:i32 = add %201, %203
-    %205:i32 = let %204
-    %206:f16 = access %mat2x3_f16, 0i, 0u
-    %207:i32 = call %tint_f16_to_i32, %206
-    %208:i32 = add %205, %207
-    %209:i32 = let %208
-    %210:f16 = access %mat2x4_f16, 0i, 0u
-    %211:i32 = call %tint_f16_to_i32, %210
-    %212:i32 = add %209, %211
-    %213:i32 = let %212
-    %214:f16 = access %mat3x2_f16, 0i, 0u
-    %215:i32 = call %tint_f16_to_i32, %214
-    %216:i32 = add %213, %215
-    %217:i32 = let %216
-    %218:f16 = access %mat3x3_f16, 0i, 0u
-    %219:i32 = call %tint_f16_to_i32, %218
-    %220:i32 = add %217, %219
-    %221:i32 = let %220
-    %222:f16 = access %mat3x4_f16, 0i, 0u
-    %223:i32 = call %tint_f16_to_i32, %222
-    %224:i32 = add %221, %223
-    %225:i32 = let %224
-    %226:f16 = access %mat4x2_f16, 0i, 0u
-    %227:i32 = call %tint_f16_to_i32, %226
-    %228:i32 = add %225, %227
-    %229:i32 = let %228
-    %230:f16 = access %mat4x3_f16, 0i, 0u
-    %231:i32 = call %tint_f16_to_i32, %230
-    %232:i32 = add %229, %231
-    %233:i32 = let %232
-    %234:f16 = access %mat4x4_f16, 0i, 0u
-    %235:i32 = call %tint_f16_to_i32, %234
-    %236:i32 = add %233, %235
-    %237:i32 = let %236
-    %238:f16 = access %arr2_mat4x2_f16, 0i, 0i, 0u
-    %239:i32 = call %tint_f16_to_i32, %238
-    %240:i32 = add %237, %239
-    %241:i32 = let %240
-    %242:f32 = access %arr2_vec3_f32, 0i, 0u
-    %243:i32 = call %tint_f32_to_i32, %242
-    %244:i32 = add %241, %243
-    store %s, %244
-    ret
-  }
+void tint_symbol_inner(uint idx, tint_module_vars_struct tint_module_vars) {
+  float const scalar_f32 = (*tint_module_vars.sb).arr[idx].scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.sb).arr[idx].scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.sb).arr[idx].scalar_u32;
+  half const scalar_f16 = (*tint_module_vars.sb).arr[idx].scalar_f16;
+  float2 const vec2_f32 = (*tint_module_vars.sb).arr[idx].vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.sb).arr[idx].vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.sb).arr[idx].vec2_u32;
+  half2 const vec2_f16 = (*tint_module_vars.sb).arr[idx].vec2_f16;
+  float3 const vec3_f32 = (*tint_module_vars.sb).arr[idx].vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.sb).arr[idx].vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.sb).arr[idx].vec3_u32;
+  half3 const vec3_f16 = (*tint_module_vars.sb).arr[idx].vec3_f16;
+  float4 const vec4_f32 = (*tint_module_vars.sb).arr[idx].vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.sb).arr[idx].vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.sb).arr[idx].vec4_u32;
+  half4 const vec4_f16 = (*tint_module_vars.sb).arr[idx].vec4_f16;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.sb).arr[idx].mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.sb).arr[idx].mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.sb).arr[idx].mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.sb).arr[idx].mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.sb).arr[idx].mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.sb).arr[idx].mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.sb).arr[idx].mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.sb).arr[idx].mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.sb).arr[idx].mat4x4_f32;
+  half2x2 const mat2x2_f16 = (*tint_module_vars.sb).arr[idx].mat2x2_f16;
+  half2x3 const mat2x3_f16 = (*tint_module_vars.sb).arr[idx].mat2x3_f16;
+  half2x4 const mat2x4_f16 = (*tint_module_vars.sb).arr[idx].mat2x4_f16;
+  half3x2 const mat3x2_f16 = (*tint_module_vars.sb).arr[idx].mat3x2_f16;
+  half3x3 const mat3x3_f16 = (*tint_module_vars.sb).arr[idx].mat3x3_f16;
+  half3x4 const mat3x4_f16 = (*tint_module_vars.sb).arr[idx].mat3x4_f16;
+  half4x2 const mat4x2_f16 = (*tint_module_vars.sb).arr[idx].mat4x2_f16;
+  half4x3 const mat4x3_f16 = (*tint_module_vars.sb).arr[idx].mat4x3_f16;
+  half4x4 const mat4x4_f16 = (*tint_module_vars.sb).arr[idx].mat4x4_f16;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.sb).arr[idx].arr2_vec3_f32;
+  tint_array<half4x2, 2> const arr2_mat4x2_f16 = (*tint_module_vars.sb).arr[idx].arr2_mat4x2_f16;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = (v_1 + tint_f16_to_i32(scalar_f16));
+  int const v_3 = ((v_2 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_4 = (v_3 + int(vec2_u32[0u]));
+  int const v_5 = (v_4 + tint_f16_to_i32(vec2_f16[0u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_7 = (v_6 + int(vec3_u32[1u]));
+  int const v_8 = (v_7 + tint_f16_to_i32(vec3_f16[1u]));
+  int const v_9 = ((v_8 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_10 = (v_9 + int(vec4_u32[2u]));
+  int const v_11 = (v_10 + tint_f16_to_i32(vec4_f16[2u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_17 = (v_16 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_18 = (v_17 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_19 = (v_18 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_20 = (v_19 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  int const v_21 = (v_20 + tint_f16_to_i32(mat2x2_f16[0][0u]));
+  int const v_22 = (v_21 + tint_f16_to_i32(mat2x3_f16[0][0u]));
+  int const v_23 = (v_22 + tint_f16_to_i32(mat2x4_f16[0][0u]));
+  int const v_24 = (v_23 + tint_f16_to_i32(mat3x2_f16[0][0u]));
+  int const v_25 = (v_24 + tint_f16_to_i32(mat3x3_f16[0][0u]));
+  int const v_26 = (v_25 + tint_f16_to_i32(mat3x4_f16[0][0u]));
+  int const v_27 = (v_26 + tint_f16_to_i32(mat4x2_f16[0][0u]));
+  int const v_28 = (v_27 + tint_f16_to_i32(mat4x3_f16[0][0u]));
+  int const v_29 = (v_28 + tint_f16_to_i32(mat4x4_f16[0][0u]));
+  int const v_30 = (v_29 + tint_f16_to_i32(arr2_mat4x2_f16[0][0][0u]));
+  (*tint_module_vars.s) = (v_30 + tint_f32_to_i32(arr2_vec3_f32[0][0u]));
 }
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %246:i32 = convert %value
-    %247:bool = gte %value, -2147483648.0f
-    %248:i32 = select -2147483648i, %246, %247
-    %249:bool = lte %value, 2147483520.0f
-    %250:i32 = select 2147483647i, %248, %249
-    ret %250
-  }
+kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], const device S* sb [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb=sb, .s=s};
+  tint_symbol_inner(idx, tint_module_vars);
 }
-%tint_f16_to_i32 = func(%value_1:f16):i32 {  # %value_1: 'value'
-  $B4: {
-    %252:i32 = convert %value_1
-    %253:bool = gte %value_1, -65504.0h
-    %254:i32 = select -2147483648i, %252, %253
-    %255:bool = lte %value_1, 65504.0h
-    %256:i32 = select 2147483647i, %254, %255
-    ret %256
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/storage/static_index/read.wgsl.expected.ir.msl b/test/tint/buffer/storage/static_index/read.wgsl.expected.ir.msl
index 8db9155..2daaefc 100644
--- a/test/tint/buffer/storage/static_index/read.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/static_index/read.wgsl.expected.ir.msl
@@ -1,214 +1,97 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
-  scalar_i32:i32 @offset(0)
-  scalar_f32:f32 @offset(4)
-}
+struct Inner {
+  int scalar_i32;
+  float scalar_f32;
+};
+struct S {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  tint_array<float3, 2> arr2_vec3_f32;
+  Inner struct_inner;
+  tint_array<Inner, 4> array_struct_inner;
+};
+struct tint_module_vars_struct {
+  const device S* sb;
+  device int* s;
+};
 
-S = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec4_f32:vec4<f32> @offset(96)
-  vec4_i32:vec4<i32> @offset(112)
-  vec4_u32:vec4<u32> @offset(128)
-  mat2x2_f32:mat2x2<f32> @offset(144)
-  mat2x3_f32:mat2x3<f32> @offset(160)
-  mat2x4_f32:mat2x4<f32> @offset(192)
-  mat3x2_f32:mat3x2<f32> @offset(224)
-  mat3x3_f32:mat3x3<f32> @offset(256)
-  mat3x4_f32:mat3x4<f32> @offset(304)
-  mat4x2_f32:mat4x2<f32> @offset(352)
-  mat4x3_f32:mat4x3<f32> @offset(384)
-  mat4x4_f32:mat4x4<f32> @offset(448)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(512)
-  struct_inner:Inner @offset(544)
-  array_struct_inner:array<Inner, 4> @offset(552)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-$B1: {  # root
-  %sb:ptr<storage, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+kernel void tint_symbol(const device S* sb [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb=sb, .s=s};
+  float const scalar_f32 = (*tint_module_vars.sb).scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.sb).scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.sb).scalar_u32;
+  float2 const vec2_f32 = (*tint_module_vars.sb).vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.sb).vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.sb).vec2_u32;
+  float3 const vec3_f32 = (*tint_module_vars.sb).vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.sb).vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.sb).vec3_u32;
+  float4 const vec4_f32 = (*tint_module_vars.sb).vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.sb).vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.sb).vec4_u32;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.sb).mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.sb).mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.sb).mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.sb).mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.sb).mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.sb).mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.sb).mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.sb).mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.sb).mat4x4_f32;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.sb).arr2_vec3_f32;
+  Inner const struct_inner = (*tint_module_vars.sb).struct_inner;
+  tint_array<Inner, 4> const array_struct_inner = (*tint_module_vars.sb).array_struct_inner;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = ((v_1 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_3 = (v_2 + int(vec2_u32[0u]));
+  int const v_4 = ((v_3 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_5 = (v_4 + int(vec3_u32[1u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_7 = (v_6 + int(vec4_u32[2u]));
+  int const v_8 = (v_7 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_9 = (v_8 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_10 = (v_9 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_11 = (v_10 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  (*tint_module_vars.s) = (((v_16 + tint_f32_to_i32(arr2_vec3_f32[0][0u])) + struct_inner.scalar_i32) + array_struct_inner[0].scalar_i32);
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
-  $B2: {
-    %4:ptr<storage, f32, read> = access %sb, 0u
-    %5:f32 = load %4
-    %scalar_f32:f32 = let %5
-    %7:ptr<storage, i32, read> = access %sb, 1u
-    %8:i32 = load %7
-    %scalar_i32:i32 = let %8
-    %10:ptr<storage, u32, read> = access %sb, 2u
-    %11:u32 = load %10
-    %scalar_u32:u32 = let %11
-    %13:ptr<storage, vec2<f32>, read> = access %sb, 3u
-    %14:vec2<f32> = load %13
-    %vec2_f32:vec2<f32> = let %14
-    %16:ptr<storage, vec2<i32>, read> = access %sb, 4u
-    %17:vec2<i32> = load %16
-    %vec2_i32:vec2<i32> = let %17
-    %19:ptr<storage, vec2<u32>, read> = access %sb, 5u
-    %20:vec2<u32> = load %19
-    %vec2_u32:vec2<u32> = let %20
-    %22:ptr<storage, vec3<f32>, read> = access %sb, 6u
-    %23:vec3<f32> = load %22
-    %vec3_f32:vec3<f32> = let %23
-    %25:ptr<storage, vec3<i32>, read> = access %sb, 7u
-    %26:vec3<i32> = load %25
-    %vec3_i32:vec3<i32> = let %26
-    %28:ptr<storage, vec3<u32>, read> = access %sb, 8u
-    %29:vec3<u32> = load %28
-    %vec3_u32:vec3<u32> = let %29
-    %31:ptr<storage, vec4<f32>, read> = access %sb, 9u
-    %32:vec4<f32> = load %31
-    %vec4_f32:vec4<f32> = let %32
-    %34:ptr<storage, vec4<i32>, read> = access %sb, 10u
-    %35:vec4<i32> = load %34
-    %vec4_i32:vec4<i32> = let %35
-    %37:ptr<storage, vec4<u32>, read> = access %sb, 11u
-    %38:vec4<u32> = load %37
-    %vec4_u32:vec4<u32> = let %38
-    %40:ptr<storage, mat2x2<f32>, read> = access %sb, 12u
-    %41:mat2x2<f32> = load %40
-    %mat2x2_f32:mat2x2<f32> = let %41
-    %43:ptr<storage, mat2x3<f32>, read> = access %sb, 13u
-    %44:mat2x3<f32> = load %43
-    %mat2x3_f32:mat2x3<f32> = let %44
-    %46:ptr<storage, mat2x4<f32>, read> = access %sb, 14u
-    %47:mat2x4<f32> = load %46
-    %mat2x4_f32:mat2x4<f32> = let %47
-    %49:ptr<storage, mat3x2<f32>, read> = access %sb, 15u
-    %50:mat3x2<f32> = load %49
-    %mat3x2_f32:mat3x2<f32> = let %50
-    %52:ptr<storage, mat3x3<f32>, read> = access %sb, 16u
-    %53:mat3x3<f32> = load %52
-    %mat3x3_f32:mat3x3<f32> = let %53
-    %55:ptr<storage, mat3x4<f32>, read> = access %sb, 17u
-    %56:mat3x4<f32> = load %55
-    %mat3x4_f32:mat3x4<f32> = let %56
-    %58:ptr<storage, mat4x2<f32>, read> = access %sb, 18u
-    %59:mat4x2<f32> = load %58
-    %mat4x2_f32:mat4x2<f32> = let %59
-    %61:ptr<storage, mat4x3<f32>, read> = access %sb, 19u
-    %62:mat4x3<f32> = load %61
-    %mat4x3_f32:mat4x3<f32> = let %62
-    %64:ptr<storage, mat4x4<f32>, read> = access %sb, 20u
-    %65:mat4x4<f32> = load %64
-    %mat4x4_f32:mat4x4<f32> = let %65
-    %67:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 21u
-    %68:array<vec3<f32>, 2> = load %67
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %68
-    %70:ptr<storage, Inner, read> = access %sb, 22u
-    %71:Inner = load %70
-    %struct_inner:Inner = let %71
-    %73:ptr<storage, array<Inner, 4>, read> = access %sb, 23u
-    %74:array<Inner, 4> = load %73
-    %array_struct_inner:array<Inner, 4> = let %74
-    %76:i32 = call %tint_f32_to_i32, %scalar_f32
-    %78:i32 = add %76, %scalar_i32
-    %79:i32 = let %78
-    %80:i32 = convert %scalar_u32
-    %81:i32 = add %79, %80
-    %82:i32 = let %81
-    %83:f32 = access %vec2_f32, 0u
-    %84:i32 = call %tint_f32_to_i32, %83
-    %85:i32 = add %82, %84
-    %86:i32 = access %vec2_i32, 0u
-    %87:i32 = add %85, %86
-    %88:i32 = let %87
-    %89:u32 = access %vec2_u32, 0u
-    %90:i32 = convert %89
-    %91:i32 = add %88, %90
-    %92:i32 = let %91
-    %93:f32 = access %vec3_f32, 1u
-    %94:i32 = call %tint_f32_to_i32, %93
-    %95:i32 = add %92, %94
-    %96:i32 = access %vec3_i32, 1u
-    %97:i32 = add %95, %96
-    %98:i32 = let %97
-    %99:u32 = access %vec3_u32, 1u
-    %100:i32 = convert %99
-    %101:i32 = add %98, %100
-    %102:i32 = let %101
-    %103:f32 = access %vec4_f32, 2u
-    %104:i32 = call %tint_f32_to_i32, %103
-    %105:i32 = add %102, %104
-    %106:i32 = access %vec4_i32, 2u
-    %107:i32 = add %105, %106
-    %108:i32 = let %107
-    %109:u32 = access %vec4_u32, 2u
-    %110:i32 = convert %109
-    %111:i32 = add %108, %110
-    %112:i32 = let %111
-    %113:f32 = access %mat2x2_f32, 0i, 0u
-    %114:i32 = call %tint_f32_to_i32, %113
-    %115:i32 = add %112, %114
-    %116:i32 = let %115
-    %117:f32 = access %mat2x3_f32, 0i, 0u
-    %118:i32 = call %tint_f32_to_i32, %117
-    %119:i32 = add %116, %118
-    %120:i32 = let %119
-    %121:f32 = access %mat2x4_f32, 0i, 0u
-    %122:i32 = call %tint_f32_to_i32, %121
-    %123:i32 = add %120, %122
-    %124:i32 = let %123
-    %125:f32 = access %mat3x2_f32, 0i, 0u
-    %126:i32 = call %tint_f32_to_i32, %125
-    %127:i32 = add %124, %126
-    %128:i32 = let %127
-    %129:f32 = access %mat3x3_f32, 0i, 0u
-    %130:i32 = call %tint_f32_to_i32, %129
-    %131:i32 = add %128, %130
-    %132:i32 = let %131
-    %133:f32 = access %mat3x4_f32, 0i, 0u
-    %134:i32 = call %tint_f32_to_i32, %133
-    %135:i32 = add %132, %134
-    %136:i32 = let %135
-    %137:f32 = access %mat4x2_f32, 0i, 0u
-    %138:i32 = call %tint_f32_to_i32, %137
-    %139:i32 = add %136, %138
-    %140:i32 = let %139
-    %141:f32 = access %mat4x3_f32, 0i, 0u
-    %142:i32 = call %tint_f32_to_i32, %141
-    %143:i32 = add %140, %142
-    %144:i32 = let %143
-    %145:f32 = access %mat4x4_f32, 0i, 0u
-    %146:i32 = call %tint_f32_to_i32, %145
-    %147:i32 = add %144, %146
-    %148:i32 = let %147
-    %149:f32 = access %arr2_vec3_f32, 0i, 0u
-    %150:i32 = call %tint_f32_to_i32, %149
-    %151:i32 = add %148, %150
-    %152:i32 = access %struct_inner, 0u
-    %153:i32 = add %151, %152
-    %154:i32 = access %array_struct_inner, 0i, 0u
-    %155:i32 = add %153, %154
-    store %s, %155
-    ret
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %157:i32 = convert %value
-    %158:bool = gte %value, -2147483648.0f
-    %159:i32 = select -2147483648i, %157, %158
-    %160:bool = lte %value, 2147483520.0f
-    %161:i32 = select 2147483647i, %159, %160
-    ret %161
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.ir.msl
index 799ebd2..d730a84 100644
--- a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.ir.msl
@@ -1,336 +1,143 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
-  scalar_i32:i32 @offset(0)
-  scalar_f32:f32 @offset(4)
-  scalar_f16:f16 @offset(8)
-}
+struct Inner {
+  int scalar_i32;
+  float scalar_f32;
+  half scalar_f16;
+};
+struct S {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  half scalar_f16;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  half2 vec2_f16;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  half3 vec3_f16;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  half4 vec4_f16;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  half2x2 mat2x2_f16;
+  half2x3 mat2x3_f16;
+  half2x4 mat2x4_f16;
+  half3x2 mat3x2_f16;
+  half3x3 mat3x3_f16;
+  half3x4 mat3x4_f16;
+  half4x2 mat4x2_f16;
+  half4x3 mat4x3_f16;
+  half4x4 mat4x4_f16;
+  tint_array<float3, 2> arr2_vec3_f32;
+  tint_array<half4x2, 2> arr2_mat4x2_f16;
+  Inner struct_inner;
+  tint_array<Inner, 4> array_struct_inner;
+};
+struct tint_module_vars_struct {
+  const device S* sb;
+  device int* s;
+};
 
-S = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  scalar_f16:f16 @offset(12)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec2_f16:vec2<f16> @offset(40)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec3_f16:vec3<f16> @offset(96)
-  vec4_f32:vec4<f32> @offset(112)
-  vec4_i32:vec4<i32> @offset(128)
-  vec4_u32:vec4<u32> @offset(144)
-  vec4_f16:vec4<f16> @offset(160)
-  mat2x2_f32:mat2x2<f32> @offset(168)
-  mat2x3_f32:mat2x3<f32> @offset(192)
-  mat2x4_f32:mat2x4<f32> @offset(224)
-  mat3x2_f32:mat3x2<f32> @offset(256)
-  mat3x3_f32:mat3x3<f32> @offset(288)
-  mat3x4_f32:mat3x4<f32> @offset(336)
-  mat4x2_f32:mat4x2<f32> @offset(384)
-  mat4x3_f32:mat4x3<f32> @offset(416)
-  mat4x4_f32:mat4x4<f32> @offset(480)
-  mat2x2_f16:mat2x2<f16> @offset(544)
-  mat2x3_f16:mat2x3<f16> @offset(552)
-  mat2x4_f16:mat2x4<f16> @offset(568)
-  mat3x2_f16:mat3x2<f16> @offset(584)
-  mat3x3_f16:mat3x3<f16> @offset(600)
-  mat3x4_f16:mat3x4<f16> @offset(624)
-  mat4x2_f16:mat4x2<f16> @offset(648)
-  mat4x3_f16:mat4x3<f16> @offset(664)
-  mat4x4_f16:mat4x4<f16> @offset(696)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(736)
-  arr2_mat4x2_f16:array<mat4x2<f16>, 2> @offset(768)
-  struct_inner:Inner @offset(800)
-  array_struct_inner:array<Inner, 4> @offset(812)
+int tint_f16_to_i32(half value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -65504.0h)), (value <= 65504.0h));
 }
-
-$B1: {  # root
-  %sb:ptr<storage, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
-  $B2: {
-    %4:ptr<storage, f32, read> = access %sb, 0u
-    %5:f32 = load %4
-    %scalar_f32:f32 = let %5
-    %7:ptr<storage, i32, read> = access %sb, 1u
-    %8:i32 = load %7
-    %scalar_i32:i32 = let %8
-    %10:ptr<storage, u32, read> = access %sb, 2u
-    %11:u32 = load %10
-    %scalar_u32:u32 = let %11
-    %13:ptr<storage, f16, read> = access %sb, 3u
-    %14:f16 = load %13
-    %scalar_f16:f16 = let %14
-    %16:ptr<storage, vec2<f32>, read> = access %sb, 4u
-    %17:vec2<f32> = load %16
-    %vec2_f32:vec2<f32> = let %17
-    %19:ptr<storage, vec2<i32>, read> = access %sb, 5u
-    %20:vec2<i32> = load %19
-    %vec2_i32:vec2<i32> = let %20
-    %22:ptr<storage, vec2<u32>, read> = access %sb, 6u
-    %23:vec2<u32> = load %22
-    %vec2_u32:vec2<u32> = let %23
-    %25:ptr<storage, vec2<f16>, read> = access %sb, 7u
-    %26:vec2<f16> = load %25
-    %vec2_f16:vec2<f16> = let %26
-    %28:ptr<storage, vec3<f32>, read> = access %sb, 8u
-    %29:vec3<f32> = load %28
-    %vec3_f32:vec3<f32> = let %29
-    %31:ptr<storage, vec3<i32>, read> = access %sb, 9u
-    %32:vec3<i32> = load %31
-    %vec3_i32:vec3<i32> = let %32
-    %34:ptr<storage, vec3<u32>, read> = access %sb, 10u
-    %35:vec3<u32> = load %34
-    %vec3_u32:vec3<u32> = let %35
-    %37:ptr<storage, vec3<f16>, read> = access %sb, 11u
-    %38:vec3<f16> = load %37
-    %vec3_f16:vec3<f16> = let %38
-    %40:ptr<storage, vec4<f32>, read> = access %sb, 12u
-    %41:vec4<f32> = load %40
-    %vec4_f32:vec4<f32> = let %41
-    %43:ptr<storage, vec4<i32>, read> = access %sb, 13u
-    %44:vec4<i32> = load %43
-    %vec4_i32:vec4<i32> = let %44
-    %46:ptr<storage, vec4<u32>, read> = access %sb, 14u
-    %47:vec4<u32> = load %46
-    %vec4_u32:vec4<u32> = let %47
-    %49:ptr<storage, vec4<f16>, read> = access %sb, 15u
-    %50:vec4<f16> = load %49
-    %vec4_f16:vec4<f16> = let %50
-    %52:ptr<storage, mat2x2<f32>, read> = access %sb, 16u
-    %53:mat2x2<f32> = load %52
-    %mat2x2_f32:mat2x2<f32> = let %53
-    %55:ptr<storage, mat2x3<f32>, read> = access %sb, 17u
-    %56:mat2x3<f32> = load %55
-    %mat2x3_f32:mat2x3<f32> = let %56
-    %58:ptr<storage, mat2x4<f32>, read> = access %sb, 18u
-    %59:mat2x4<f32> = load %58
-    %mat2x4_f32:mat2x4<f32> = let %59
-    %61:ptr<storage, mat3x2<f32>, read> = access %sb, 19u
-    %62:mat3x2<f32> = load %61
-    %mat3x2_f32:mat3x2<f32> = let %62
-    %64:ptr<storage, mat3x3<f32>, read> = access %sb, 20u
-    %65:mat3x3<f32> = load %64
-    %mat3x3_f32:mat3x3<f32> = let %65
-    %67:ptr<storage, mat3x4<f32>, read> = access %sb, 21u
-    %68:mat3x4<f32> = load %67
-    %mat3x4_f32:mat3x4<f32> = let %68
-    %70:ptr<storage, mat4x2<f32>, read> = access %sb, 22u
-    %71:mat4x2<f32> = load %70
-    %mat4x2_f32:mat4x2<f32> = let %71
-    %73:ptr<storage, mat4x3<f32>, read> = access %sb, 23u
-    %74:mat4x3<f32> = load %73
-    %mat4x3_f32:mat4x3<f32> = let %74
-    %76:ptr<storage, mat4x4<f32>, read> = access %sb, 24u
-    %77:mat4x4<f32> = load %76
-    %mat4x4_f32:mat4x4<f32> = let %77
-    %79:ptr<storage, mat2x2<f16>, read> = access %sb, 25u
-    %80:mat2x2<f16> = load %79
-    %mat2x2_f16:mat2x2<f16> = let %80
-    %82:ptr<storage, mat2x3<f16>, read> = access %sb, 26u
-    %83:mat2x3<f16> = load %82
-    %mat2x3_f16:mat2x3<f16> = let %83
-    %85:ptr<storage, mat2x4<f16>, read> = access %sb, 27u
-    %86:mat2x4<f16> = load %85
-    %mat2x4_f16:mat2x4<f16> = let %86
-    %88:ptr<storage, mat3x2<f16>, read> = access %sb, 28u
-    %89:mat3x2<f16> = load %88
-    %mat3x2_f16:mat3x2<f16> = let %89
-    %91:ptr<storage, mat3x3<f16>, read> = access %sb, 29u
-    %92:mat3x3<f16> = load %91
-    %mat3x3_f16:mat3x3<f16> = let %92
-    %94:ptr<storage, mat3x4<f16>, read> = access %sb, 30u
-    %95:mat3x4<f16> = load %94
-    %mat3x4_f16:mat3x4<f16> = let %95
-    %97:ptr<storage, mat4x2<f16>, read> = access %sb, 31u
-    %98:mat4x2<f16> = load %97
-    %mat4x2_f16:mat4x2<f16> = let %98
-    %100:ptr<storage, mat4x3<f16>, read> = access %sb, 32u
-    %101:mat4x3<f16> = load %100
-    %mat4x3_f16:mat4x3<f16> = let %101
-    %103:ptr<storage, mat4x4<f16>, read> = access %sb, 33u
-    %104:mat4x4<f16> = load %103
-    %mat4x4_f16:mat4x4<f16> = let %104
-    %106:ptr<storage, array<vec3<f32>, 2>, read> = access %sb, 34u
-    %107:array<vec3<f32>, 2> = load %106
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %107
-    %109:ptr<storage, array<mat4x2<f16>, 2>, read> = access %sb, 35u
-    %110:array<mat4x2<f16>, 2> = load %109
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = let %110
-    %112:ptr<storage, Inner, read> = access %sb, 36u
-    %113:Inner = load %112
-    %struct_inner:Inner = let %113
-    %115:ptr<storage, array<Inner, 4>, read> = access %sb, 37u
-    %116:array<Inner, 4> = load %115
-    %array_struct_inner:array<Inner, 4> = let %116
-    %118:i32 = call %tint_f32_to_i32, %scalar_f32
-    %120:i32 = add %118, %scalar_i32
-    %121:i32 = let %120
-    %122:i32 = convert %scalar_u32
-    %123:i32 = add %121, %122
-    %124:i32 = let %123
-    %125:i32 = call %tint_f16_to_i32, %scalar_f16
-    %127:i32 = add %124, %125
-    %128:i32 = let %127
-    %129:f32 = access %vec2_f32, 0u
-    %130:i32 = call %tint_f32_to_i32, %129
-    %131:i32 = add %128, %130
-    %132:i32 = access %vec2_i32, 0u
-    %133:i32 = add %131, %132
-    %134:i32 = let %133
-    %135:u32 = access %vec2_u32, 0u
-    %136:i32 = convert %135
-    %137:i32 = add %134, %136
-    %138:i32 = let %137
-    %139:f16 = access %vec2_f16, 0u
-    %140:i32 = call %tint_f16_to_i32, %139
-    %141:i32 = add %138, %140
-    %142:i32 = let %141
-    %143:f32 = access %vec3_f32, 1u
-    %144:i32 = call %tint_f32_to_i32, %143
-    %145:i32 = add %142, %144
-    %146:i32 = access %vec3_i32, 1u
-    %147:i32 = add %145, %146
-    %148:i32 = let %147
-    %149:u32 = access %vec3_u32, 1u
-    %150:i32 = convert %149
-    %151:i32 = add %148, %150
-    %152:i32 = let %151
-    %153:f16 = access %vec3_f16, 1u
-    %154:i32 = call %tint_f16_to_i32, %153
-    %155:i32 = add %152, %154
-    %156:i32 = let %155
-    %157:f32 = access %vec4_f32, 2u
-    %158:i32 = call %tint_f32_to_i32, %157
-    %159:i32 = add %156, %158
-    %160:i32 = access %vec4_i32, 2u
-    %161:i32 = add %159, %160
-    %162:i32 = let %161
-    %163:u32 = access %vec4_u32, 2u
-    %164:i32 = convert %163
-    %165:i32 = add %162, %164
-    %166:i32 = let %165
-    %167:f16 = access %vec4_f16, 2u
-    %168:i32 = call %tint_f16_to_i32, %167
-    %169:i32 = add %166, %168
-    %170:i32 = let %169
-    %171:f32 = access %mat2x2_f32, 0i, 0u
-    %172:i32 = call %tint_f32_to_i32, %171
-    %173:i32 = add %170, %172
-    %174:i32 = let %173
-    %175:f32 = access %mat2x3_f32, 0i, 0u
-    %176:i32 = call %tint_f32_to_i32, %175
-    %177:i32 = add %174, %176
-    %178:i32 = let %177
-    %179:f32 = access %mat2x4_f32, 0i, 0u
-    %180:i32 = call %tint_f32_to_i32, %179
-    %181:i32 = add %178, %180
-    %182:i32 = let %181
-    %183:f32 = access %mat3x2_f32, 0i, 0u
-    %184:i32 = call %tint_f32_to_i32, %183
-    %185:i32 = add %182, %184
-    %186:i32 = let %185
-    %187:f32 = access %mat3x3_f32, 0i, 0u
-    %188:i32 = call %tint_f32_to_i32, %187
-    %189:i32 = add %186, %188
-    %190:i32 = let %189
-    %191:f32 = access %mat3x4_f32, 0i, 0u
-    %192:i32 = call %tint_f32_to_i32, %191
-    %193:i32 = add %190, %192
-    %194:i32 = let %193
-    %195:f32 = access %mat4x2_f32, 0i, 0u
-    %196:i32 = call %tint_f32_to_i32, %195
-    %197:i32 = add %194, %196
-    %198:i32 = let %197
-    %199:f32 = access %mat4x3_f32, 0i, 0u
-    %200:i32 = call %tint_f32_to_i32, %199
-    %201:i32 = add %198, %200
-    %202:i32 = let %201
-    %203:f32 = access %mat4x4_f32, 0i, 0u
-    %204:i32 = call %tint_f32_to_i32, %203
-    %205:i32 = add %202, %204
-    %206:i32 = let %205
-    %207:f16 = access %mat2x2_f16, 0i, 0u
-    %208:i32 = call %tint_f16_to_i32, %207
-    %209:i32 = add %206, %208
-    %210:i32 = let %209
-    %211:f16 = access %mat2x3_f16, 0i, 0u
-    %212:i32 = call %tint_f16_to_i32, %211
-    %213:i32 = add %210, %212
-    %214:i32 = let %213
-    %215:f16 = access %mat2x4_f16, 0i, 0u
-    %216:i32 = call %tint_f16_to_i32, %215
-    %217:i32 = add %214, %216
-    %218:i32 = let %217
-    %219:f16 = access %mat3x2_f16, 0i, 0u
-    %220:i32 = call %tint_f16_to_i32, %219
-    %221:i32 = add %218, %220
-    %222:i32 = let %221
-    %223:f16 = access %mat3x3_f16, 0i, 0u
-    %224:i32 = call %tint_f16_to_i32, %223
-    %225:i32 = add %222, %224
-    %226:i32 = let %225
-    %227:f16 = access %mat3x4_f16, 0i, 0u
-    %228:i32 = call %tint_f16_to_i32, %227
-    %229:i32 = add %226, %228
-    %230:i32 = let %229
-    %231:f16 = access %mat4x2_f16, 0i, 0u
-    %232:i32 = call %tint_f16_to_i32, %231
-    %233:i32 = add %230, %232
-    %234:i32 = let %233
-    %235:f16 = access %mat4x3_f16, 0i, 0u
-    %236:i32 = call %tint_f16_to_i32, %235
-    %237:i32 = add %234, %236
-    %238:i32 = let %237
-    %239:f16 = access %mat4x4_f16, 0i, 0u
-    %240:i32 = call %tint_f16_to_i32, %239
-    %241:i32 = add %238, %240
-    %242:i32 = let %241
-    %243:f32 = access %arr2_vec3_f32, 0i, 0u
-    %244:i32 = call %tint_f32_to_i32, %243
-    %245:i32 = add %242, %244
-    %246:i32 = let %245
-    %247:f16 = access %arr2_mat4x2_f16, 0i, 0i, 0u
-    %248:i32 = call %tint_f16_to_i32, %247
-    %249:i32 = add %246, %248
-    %250:i32 = access %struct_inner, 0u
-    %251:i32 = add %249, %250
-    %252:i32 = access %array_struct_inner, 0i, 0u
-    %253:i32 = add %251, %252
-    store %s, %253
-    ret
-  }
+kernel void tint_symbol(const device S* sb [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb=sb, .s=s};
+  float const scalar_f32 = (*tint_module_vars.sb).scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.sb).scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.sb).scalar_u32;
+  half const scalar_f16 = (*tint_module_vars.sb).scalar_f16;
+  float2 const vec2_f32 = (*tint_module_vars.sb).vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.sb).vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.sb).vec2_u32;
+  half2 const vec2_f16 = (*tint_module_vars.sb).vec2_f16;
+  float3 const vec3_f32 = (*tint_module_vars.sb).vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.sb).vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.sb).vec3_u32;
+  half3 const vec3_f16 = (*tint_module_vars.sb).vec3_f16;
+  float4 const vec4_f32 = (*tint_module_vars.sb).vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.sb).vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.sb).vec4_u32;
+  half4 const vec4_f16 = (*tint_module_vars.sb).vec4_f16;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.sb).mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.sb).mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.sb).mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.sb).mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.sb).mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.sb).mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.sb).mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.sb).mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.sb).mat4x4_f32;
+  half2x2 const mat2x2_f16 = (*tint_module_vars.sb).mat2x2_f16;
+  half2x3 const mat2x3_f16 = (*tint_module_vars.sb).mat2x3_f16;
+  half2x4 const mat2x4_f16 = (*tint_module_vars.sb).mat2x4_f16;
+  half3x2 const mat3x2_f16 = (*tint_module_vars.sb).mat3x2_f16;
+  half3x3 const mat3x3_f16 = (*tint_module_vars.sb).mat3x3_f16;
+  half3x4 const mat3x4_f16 = (*tint_module_vars.sb).mat3x4_f16;
+  half4x2 const mat4x2_f16 = (*tint_module_vars.sb).mat4x2_f16;
+  half4x3 const mat4x3_f16 = (*tint_module_vars.sb).mat4x3_f16;
+  half4x4 const mat4x4_f16 = (*tint_module_vars.sb).mat4x4_f16;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.sb).arr2_vec3_f32;
+  tint_array<half4x2, 2> const arr2_mat4x2_f16 = (*tint_module_vars.sb).arr2_mat4x2_f16;
+  Inner const struct_inner = (*tint_module_vars.sb).struct_inner;
+  tint_array<Inner, 4> const array_struct_inner = (*tint_module_vars.sb).array_struct_inner;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = (v_1 + tint_f16_to_i32(scalar_f16));
+  int const v_3 = ((v_2 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_4 = (v_3 + int(vec2_u32[0u]));
+  int const v_5 = (v_4 + tint_f16_to_i32(vec2_f16[0u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_7 = (v_6 + int(vec3_u32[1u]));
+  int const v_8 = (v_7 + tint_f16_to_i32(vec3_f16[1u]));
+  int const v_9 = ((v_8 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_10 = (v_9 + int(vec4_u32[2u]));
+  int const v_11 = (v_10 + tint_f16_to_i32(vec4_f16[2u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_17 = (v_16 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_18 = (v_17 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_19 = (v_18 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_20 = (v_19 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  int const v_21 = (v_20 + tint_f16_to_i32(mat2x2_f16[0][0u]));
+  int const v_22 = (v_21 + tint_f16_to_i32(mat2x3_f16[0][0u]));
+  int const v_23 = (v_22 + tint_f16_to_i32(mat2x4_f16[0][0u]));
+  int const v_24 = (v_23 + tint_f16_to_i32(mat3x2_f16[0][0u]));
+  int const v_25 = (v_24 + tint_f16_to_i32(mat3x3_f16[0][0u]));
+  int const v_26 = (v_25 + tint_f16_to_i32(mat3x4_f16[0][0u]));
+  int const v_27 = (v_26 + tint_f16_to_i32(mat4x2_f16[0][0u]));
+  int const v_28 = (v_27 + tint_f16_to_i32(mat4x3_f16[0][0u]));
+  int const v_29 = (v_28 + tint_f16_to_i32(mat4x4_f16[0][0u]));
+  int const v_30 = (v_29 + tint_f32_to_i32(arr2_vec3_f32[0][0u]));
+  (*tint_module_vars.s) = (((v_30 + tint_f16_to_i32(arr2_mat4x2_f16[0][0][0u])) + struct_inner.scalar_i32) + array_struct_inner[0].scalar_i32);
 }
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %255:i32 = convert %value
-    %256:bool = gte %value, -2147483648.0f
-    %257:i32 = select -2147483648i, %255, %256
-    %258:bool = lte %value, 2147483520.0f
-    %259:i32 = select 2147483647i, %257, %258
-    ret %259
-  }
-}
-%tint_f16_to_i32 = func(%value_1:f16):i32 {  # %value_1: 'value'
-  $B4: {
-    %261:i32 = convert %value_1
-    %262:bool = gte %value_1, -65504.0h
-    %263:i32 = select -2147483648i, %261, %262
-    %264:bool = lte %value_1, 65504.0h
-    %265:i32 = select 2147483647i, %263, %264
-    ret %265
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/storage/static_index/write_f16.wgsl.expected.ir.msl b/test/tint/buffer/storage/static_index/write_f16.wgsl.expected.ir.msl
index f4695d3..35551d0 100644
--- a/test/tint/buffer/storage/static_index/write_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/storage/static_index/write_f16.wgsl.expected.ir.msl
@@ -1,292 +1,169 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct Inner {
+  int scalar_i32;
+  float scalar_f32;
+  half scalar_f16;
+};
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
-  scalar_i32:i32 @offset(0)
-  scalar_f32:f32 @offset(4)
-  scalar_f16:f16 @offset(8)
-}
+struct S {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  half scalar_f16;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  half2 vec2_f16;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  half3 vec3_f16;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  half4 vec4_f16;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  half2x2 mat2x2_f16;
+  half2x3 mat2x3_f16;
+  half2x4 mat2x4_f16;
+  half3x2 mat3x2_f16;
+  half3x3 mat3x3_f16;
+  half3x4 mat3x4_f16;
+  half4x2 mat4x2_f16;
+  half4x3 mat4x3_f16;
+  half4x4 mat4x4_f16;
+  tint_array<float3, 2> arr2_vec3_f32;
+  tint_array<half4x2, 2> arr2_mat4x2_f16;
+  Inner struct_inner;
+  tint_array<Inner, 4> array_struct_inner;
+};
+struct tint_module_vars_struct {
+  device S* sb;
+};
 
-S = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  scalar_f16:f16 @offset(12)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec2_f16:vec2<f16> @offset(40)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec3_f16:vec3<f16> @offset(96)
-  vec4_f32:vec4<f32> @offset(112)
-  vec4_i32:vec4<i32> @offset(128)
-  vec4_u32:vec4<u32> @offset(144)
-  vec4_f16:vec4<f16> @offset(160)
-  mat2x2_f32:mat2x2<f32> @offset(168)
-  mat2x3_f32:mat2x3<f32> @offset(192)
-  mat2x4_f32:mat2x4<f32> @offset(224)
-  mat3x2_f32:mat3x2<f32> @offset(256)
-  mat3x3_f32:mat3x3<f32> @offset(288)
-  mat3x4_f32:mat3x4<f32> @offset(336)
-  mat4x2_f32:mat4x2<f32> @offset(384)
-  mat4x3_f32:mat4x3<f32> @offset(416)
-  mat4x4_f32:mat4x4<f32> @offset(480)
-  mat2x2_f16:mat2x2<f16> @offset(544)
-  mat2x3_f16:mat2x3<f16> @offset(552)
-  mat2x4_f16:mat2x4<f16> @offset(568)
-  mat3x2_f16:mat3x2<f16> @offset(584)
-  mat3x3_f16:mat3x3<f16> @offset(600)
-  mat3x4_f16:mat3x4<f16> @offset(624)
-  mat4x2_f16:mat4x2<f16> @offset(648)
-  mat4x3_f16:mat4x3<f16> @offset(664)
-  mat4x4_f16:mat4x4<f16> @offset(696)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(736)
-  arr2_mat4x2_f16:array<mat4x2<f16>, 2> @offset(768)
-  struct_inner:Inner @offset(800)
-  array_struct_inner:array<Inner, 4> @offset(812)
+void tint_store_and_preserve_padding(device Inner* const target, Inner value_param) {
+  (*target).scalar_i32 = value_param.scalar_i32;
+  (*target).scalar_f32 = value_param.scalar_f32;
+  (*target).scalar_f16 = value_param.scalar_f16;
 }
-
-$B1: {  # root
-  %sb:ptr<storage, S, read_write> = var @binding_point(0, 0)
-}
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
-  $B2: {
-    %3:ptr<storage, f32, read_write> = access %sb, 0u
-    store %3, 0.0f
-    %4:ptr<storage, i32, read_write> = access %sb, 1u
-    store %4, 0i
-    %5:ptr<storage, u32, read_write> = access %sb, 2u
-    store %5, 0u
-    %6:ptr<storage, f16, read_write> = access %sb, 3u
-    store %6, 0.0h
-    %7:ptr<storage, vec2<f32>, read_write> = access %sb, 4u
-    store %7, vec2<f32>(0.0f)
-    %8:ptr<storage, vec2<i32>, read_write> = access %sb, 5u
-    store %8, vec2<i32>(0i)
-    %9:ptr<storage, vec2<u32>, read_write> = access %sb, 6u
-    store %9, vec2<u32>(0u)
-    %10:ptr<storage, vec2<f16>, read_write> = access %sb, 7u
-    store %10, vec2<f16>(0.0h)
-    %11:ptr<storage, vec3<f32>, read_write> = access %sb, 8u
-    store %11, vec3<f32>(0.0f)
-    %12:ptr<storage, vec3<i32>, read_write> = access %sb, 9u
-    store %12, vec3<i32>(0i)
-    %13:ptr<storage, vec3<u32>, read_write> = access %sb, 10u
-    store %13, vec3<u32>(0u)
-    %14:ptr<storage, vec3<f16>, read_write> = access %sb, 11u
-    store %14, vec3<f16>(0.0h)
-    %15:ptr<storage, vec4<f32>, read_write> = access %sb, 12u
-    store %15, vec4<f32>(0.0f)
-    %16:ptr<storage, vec4<i32>, read_write> = access %sb, 13u
-    store %16, vec4<i32>(0i)
-    %17:ptr<storage, vec4<u32>, read_write> = access %sb, 14u
-    store %17, vec4<u32>(0u)
-    %18:ptr<storage, vec4<f16>, read_write> = access %sb, 15u
-    store %18, vec4<f16>(0.0h)
-    %19:ptr<storage, mat2x2<f32>, read_write> = access %sb, 16u
-    store %19, mat2x2<f32>(vec2<f32>(0.0f))
-    %20:ptr<storage, mat2x3<f32>, read_write> = access %sb, 17u
-    %21:void = call %tint_store_and_preserve_padding, %20, mat2x3<f32>(vec3<f32>(0.0f))
-    %23:ptr<storage, mat2x4<f32>, read_write> = access %sb, 18u
-    store %23, mat2x4<f32>(vec4<f32>(0.0f))
-    %24:ptr<storage, mat3x2<f32>, read_write> = access %sb, 19u
-    store %24, mat3x2<f32>(vec2<f32>(0.0f))
-    %25:ptr<storage, mat3x3<f32>, read_write> = access %sb, 20u
-    %26:void = call %tint_store_and_preserve_padding_1, %25, mat3x3<f32>(vec3<f32>(0.0f))
-    %28:ptr<storage, mat3x4<f32>, read_write> = access %sb, 21u
-    store %28, mat3x4<f32>(vec4<f32>(0.0f))
-    %29:ptr<storage, mat4x2<f32>, read_write> = access %sb, 22u
-    store %29, mat4x2<f32>(vec2<f32>(0.0f))
-    %30:ptr<storage, mat4x3<f32>, read_write> = access %sb, 23u
-    %31:void = call %tint_store_and_preserve_padding_2, %30, mat4x3<f32>(vec3<f32>(0.0f))
-    %33:ptr<storage, mat4x4<f32>, read_write> = access %sb, 24u
-    store %33, mat4x4<f32>(vec4<f32>(0.0f))
-    %34:ptr<storage, mat2x2<f16>, read_write> = access %sb, 25u
-    store %34, mat2x2<f16>(vec2<f16>(0.0h))
-    %35:ptr<storage, mat2x3<f16>, read_write> = access %sb, 26u
-    %36:void = call %tint_store_and_preserve_padding_3, %35, mat2x3<f16>(vec3<f16>(0.0h))
-    %38:ptr<storage, mat2x4<f16>, read_write> = access %sb, 27u
-    store %38, mat2x4<f16>(vec4<f16>(0.0h))
-    %39:ptr<storage, mat3x2<f16>, read_write> = access %sb, 28u
-    store %39, mat3x2<f16>(vec2<f16>(0.0h))
-    %40:ptr<storage, mat3x3<f16>, read_write> = access %sb, 29u
-    %41:void = call %tint_store_and_preserve_padding_4, %40, mat3x3<f16>(vec3<f16>(0.0h))
-    %43:ptr<storage, mat3x4<f16>, read_write> = access %sb, 30u
-    store %43, mat3x4<f16>(vec4<f16>(0.0h))
-    %44:ptr<storage, mat4x2<f16>, read_write> = access %sb, 31u
-    store %44, mat4x2<f16>(vec2<f16>(0.0h))
-    %45:ptr<storage, mat4x3<f16>, read_write> = access %sb, 32u
-    %46:void = call %tint_store_and_preserve_padding_5, %45, mat4x3<f16>(vec3<f16>(0.0h))
-    %48:ptr<storage, mat4x4<f16>, read_write> = access %sb, 33u
-    store %48, mat4x4<f16>(vec4<f16>(0.0h))
-    %49:ptr<storage, array<vec3<f32>, 2>, read_write> = access %sb, 34u
-    %50:void = call %tint_store_and_preserve_padding_6, %49, array<vec3<f32>, 2>(vec3<f32>(0.0f))
-    %52:ptr<storage, array<mat4x2<f16>, 2>, read_write> = access %sb, 35u
-    store %52, array<mat4x2<f16>, 2>(mat4x2<f16>(vec2<f16>(0.0h)))
-    %53:ptr<storage, Inner, read_write> = access %sb, 36u
-    %54:void = call %tint_store_and_preserve_padding_7, %53, Inner(0i, 0.0f, 0.0h)
-    %56:ptr<storage, array<Inner, 4>, read_write> = access %sb, 37u
-    %57:void = call %tint_store_and_preserve_padding_8, %56, array<Inner, 4>(Inner(0i, 0.0f, 0.0h))
-    ret
-  }
-}
-%tint_store_and_preserve_padding = func(%target:ptr<storage, mat2x3<f32>, read_write>, %value_param:mat2x3<f32>):void {
-  $B3: {
-    %61:ptr<storage, vec3<f32>, read_write> = access %target, 0u
-    %62:vec3<f32> = access %value_param, 0u
-    store %61, %62
-    %63:ptr<storage, vec3<f32>, read_write> = access %target, 1u
-    %64:vec3<f32> = access %value_param, 1u
-    store %63, %64
-    ret
-  }
-}
-%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, mat3x3<f32>, read_write>, %value_param_1:mat3x3<f32>):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
-  $B4: {
-    %67:ptr<storage, vec3<f32>, read_write> = access %target_1, 0u
-    %68:vec3<f32> = access %value_param_1, 0u
-    store %67, %68
-    %69:ptr<storage, vec3<f32>, read_write> = access %target_1, 1u
-    %70:vec3<f32> = access %value_param_1, 1u
-    store %69, %70
-    %71:ptr<storage, vec3<f32>, read_write> = access %target_1, 2u
-    %72:vec3<f32> = access %value_param_1, 2u
-    store %71, %72
-    ret
-  }
-}
-%tint_store_and_preserve_padding_2 = func(%target_2:ptr<storage, mat4x3<f32>, read_write>, %value_param_2:mat4x3<f32>):void {  # %tint_store_and_preserve_padding_2: 'tint_store_and_preserve_padding', %target_2: 'target', %value_param_2: 'value_param'
-  $B5: {
-    %75:ptr<storage, vec3<f32>, read_write> = access %target_2, 0u
-    %76:vec3<f32> = access %value_param_2, 0u
-    store %75, %76
-    %77:ptr<storage, vec3<f32>, read_write> = access %target_2, 1u
-    %78:vec3<f32> = access %value_param_2, 1u
-    store %77, %78
-    %79:ptr<storage, vec3<f32>, read_write> = access %target_2, 2u
-    %80:vec3<f32> = access %value_param_2, 2u
-    store %79, %80
-    %81:ptr<storage, vec3<f32>, read_write> = access %target_2, 3u
-    %82:vec3<f32> = access %value_param_2, 3u
-    store %81, %82
-    ret
-  }
-}
-%tint_store_and_preserve_padding_3 = func(%target_3:ptr<storage, mat2x3<f16>, read_write>, %value_param_3:mat2x3<f16>):void {  # %tint_store_and_preserve_padding_3: 'tint_store_and_preserve_padding', %target_3: 'target', %value_param_3: 'value_param'
-  $B6: {
-    %85:ptr<storage, vec3<f16>, read_write> = access %target_3, 0u
-    %86:vec3<f16> = access %value_param_3, 0u
-    store %85, %86
-    %87:ptr<storage, vec3<f16>, read_write> = access %target_3, 1u
-    %88:vec3<f16> = access %value_param_3, 1u
-    store %87, %88
-    ret
-  }
-}
-%tint_store_and_preserve_padding_4 = func(%target_4:ptr<storage, mat3x3<f16>, read_write>, %value_param_4:mat3x3<f16>):void {  # %tint_store_and_preserve_padding_4: 'tint_store_and_preserve_padding', %target_4: 'target', %value_param_4: 'value_param'
-  $B7: {
-    %91:ptr<storage, vec3<f16>, read_write> = access %target_4, 0u
-    %92:vec3<f16> = access %value_param_4, 0u
-    store %91, %92
-    %93:ptr<storage, vec3<f16>, read_write> = access %target_4, 1u
-    %94:vec3<f16> = access %value_param_4, 1u
-    store %93, %94
-    %95:ptr<storage, vec3<f16>, read_write> = access %target_4, 2u
-    %96:vec3<f16> = access %value_param_4, 2u
-    store %95, %96
-    ret
-  }
-}
-%tint_store_and_preserve_padding_5 = func(%target_5:ptr<storage, mat4x3<f16>, read_write>, %value_param_5:mat4x3<f16>):void {  # %tint_store_and_preserve_padding_5: 'tint_store_and_preserve_padding', %target_5: 'target', %value_param_5: 'value_param'
-  $B8: {
-    %99:ptr<storage, vec3<f16>, read_write> = access %target_5, 0u
-    %100:vec3<f16> = access %value_param_5, 0u
-    store %99, %100
-    %101:ptr<storage, vec3<f16>, read_write> = access %target_5, 1u
-    %102:vec3<f16> = access %value_param_5, 1u
-    store %101, %102
-    %103:ptr<storage, vec3<f16>, read_write> = access %target_5, 2u
-    %104:vec3<f16> = access %value_param_5, 2u
-    store %103, %104
-    %105:ptr<storage, vec3<f16>, read_write> = access %target_5, 3u
-    %106:vec3<f16> = access %value_param_5, 3u
-    store %105, %106
-    ret
-  }
-}
-%tint_store_and_preserve_padding_6 = func(%target_6:ptr<storage, array<vec3<f32>, 2>, read_write>, %value_param_6:array<vec3<f32>, 2>):void {  # %tint_store_and_preserve_padding_6: 'tint_store_and_preserve_padding', %target_6: 'target', %value_param_6: 'value_param'
-  $B9: {
-    loop [i: $B10, b: $B11, c: $B12] {  # loop_1
-      $B10: {  # initializer
-        next_iteration 0u  # -> $B11
+void tint_store_and_preserve_padding(device tint_array<Inner, 4>* const target, tint_array<Inner, 4> value_param) {
+  {
+    uint v = 0u;
+    v = 0u;
+    while(true) {
+      uint const v_1 = v;
+      if ((v_1 >= 4u)) {
+        break;
       }
-      $B11 (%idx:u32): {  # body
-        %110:bool = gte %idx, 2u
-        if %110 [t: $B13] {  # if_1
-          $B13: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %111:ptr<storage, vec3<f32>, read_write> = access %target_6, %idx
-        %112:vec3<f32> = access %value_param_6, %idx
-        store %111, %112
-        continue  # -> $B12
-      }
-      $B12: {  # continuing
-        %113:u32 = add %idx, 1u
-        next_iteration %113  # -> $B11
-      }
+      tint_store_and_preserve_padding((&(*target)[v_1]), value_param[v_1]);
+      v = (v_1 + 1u);
+      continue;
     }
-    ret
   }
 }
-%tint_store_and_preserve_padding_7 = func(%target_7:ptr<storage, Inner, read_write>, %value_param_7:Inner):void {  # %tint_store_and_preserve_padding_7: 'tint_store_and_preserve_padding', %target_7: 'target', %value_param_7: 'value_param'
-  $B14: {
-    %116:ptr<storage, i32, read_write> = access %target_7, 0u
-    %117:i32 = access %value_param_7, 0u
-    store %116, %117
-    %118:ptr<storage, f32, read_write> = access %target_7, 1u
-    %119:f32 = access %value_param_7, 1u
-    store %118, %119
-    %120:ptr<storage, f16, read_write> = access %target_7, 2u
-    %121:f16 = access %value_param_7, 2u
-    store %120, %121
-    ret
-  }
-}
-%tint_store_and_preserve_padding_8 = func(%target_8:ptr<storage, array<Inner, 4>, read_write>, %value_param_8:array<Inner, 4>):void {  # %tint_store_and_preserve_padding_8: 'tint_store_and_preserve_padding', %target_8: 'target', %value_param_8: 'value_param'
-  $B15: {
-    loop [i: $B16, b: $B17, c: $B18] {  # loop_2
-      $B16: {  # initializer
-        next_iteration 0u  # -> $B17
+void tint_store_and_preserve_padding(device tint_array<float3, 2>* const target, tint_array<float3, 2> value_param) {
+  {
+    uint v_2 = 0u;
+    v_2 = 0u;
+    while(true) {
+      uint const v_3 = v_2;
+      if ((v_3 >= 2u)) {
+        break;
       }
-      $B17 (%idx_1:u32): {  # body
-        %125:bool = gte %idx_1, 4u
-        if %125 [t: $B19] {  # if_2
-          $B19: {  # true
-            exit_loop  # loop_2
-          }
-        }
-        %126:ptr<storage, Inner, read_write> = access %target_8, %idx_1
-        %127:Inner = access %value_param_8, %idx_1
-        %128:void = call %tint_store_and_preserve_padding_7, %126, %127
-        continue  # -> $B18
-      }
-      $B18: {  # continuing
-        %129:u32 = add %idx_1, 1u
-        next_iteration %129  # -> $B17
-      }
+      (*target)[v_3] = value_param[v_3];
+      v_2 = (v_3 + 1u);
+      continue;
     }
-    ret
   }
 }
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+void tint_store_and_preserve_padding(device half4x3* const target, half4x3 value_param) {
+  (*target)[0u] = value_param[0u];
+  (*target)[1u] = value_param[1u];
+  (*target)[2u] = value_param[2u];
+  (*target)[3u] = value_param[3u];
+}
+void tint_store_and_preserve_padding(device half3x3* const target, half3x3 value_param) {
+  (*target)[0u] = value_param[0u];
+  (*target)[1u] = value_param[1u];
+  (*target)[2u] = value_param[2u];
+}
+void tint_store_and_preserve_padding(device half2x3* const target, half2x3 value_param) {
+  (*target)[0u] = value_param[0u];
+  (*target)[1u] = value_param[1u];
+}
+void tint_store_and_preserve_padding(device float4x3* const target, float4x3 value_param) {
+  (*target)[0u] = value_param[0u];
+  (*target)[1u] = value_param[1u];
+  (*target)[2u] = value_param[2u];
+  (*target)[3u] = value_param[3u];
+}
+void tint_store_and_preserve_padding(device float3x3* const target, float3x3 value_param) {
+  (*target)[0u] = value_param[0u];
+  (*target)[1u] = value_param[1u];
+  (*target)[2u] = value_param[2u];
+}
+void tint_store_and_preserve_padding(device float2x3* const target, float2x3 value_param) {
+  (*target)[0u] = value_param[0u];
+  (*target)[1u] = value_param[1u];
+}
+kernel void tint_symbol(device S* sb [[buffer(0)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb=sb};
+  (*tint_module_vars.sb).scalar_f32 = 0.0f;
+  (*tint_module_vars.sb).scalar_i32 = 0;
+  (*tint_module_vars.sb).scalar_u32 = 0u;
+  (*tint_module_vars.sb).scalar_f16 = 0.0h;
+  (*tint_module_vars.sb).vec2_f32 = float2(0.0f);
+  (*tint_module_vars.sb).vec2_i32 = int2(0);
+  (*tint_module_vars.sb).vec2_u32 = uint2(0u);
+  (*tint_module_vars.sb).vec2_f16 = half2(0.0h);
+  (*tint_module_vars.sb).vec3_f32 = float3(0.0f);
+  (*tint_module_vars.sb).vec3_i32 = int3(0);
+  (*tint_module_vars.sb).vec3_u32 = uint3(0u);
+  (*tint_module_vars.sb).vec3_f16 = half3(0.0h);
+  (*tint_module_vars.sb).vec4_f32 = float4(0.0f);
+  (*tint_module_vars.sb).vec4_i32 = int4(0);
+  (*tint_module_vars.sb).vec4_u32 = uint4(0u);
+  (*tint_module_vars.sb).vec4_f16 = half4(0.0h);
+  (*tint_module_vars.sb).mat2x2_f32 = float2x2(float2(0.0f), float2(0.0f));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).mat2x3_f32), float2x3(float3(0.0f), float3(0.0f)));
+  (*tint_module_vars.sb).mat2x4_f32 = float2x4(float4(0.0f), float4(0.0f));
+  (*tint_module_vars.sb).mat3x2_f32 = float3x2(float2(0.0f), float2(0.0f), float2(0.0f));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).mat3x3_f32), float3x3(float3(0.0f), float3(0.0f), float3(0.0f)));
+  (*tint_module_vars.sb).mat3x4_f32 = float3x4(float4(0.0f), float4(0.0f), float4(0.0f));
+  (*tint_module_vars.sb).mat4x2_f32 = float4x2(float2(0.0f), float2(0.0f), float2(0.0f), float2(0.0f));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).mat4x3_f32), float4x3(float3(0.0f), float3(0.0f), float3(0.0f), float3(0.0f)));
+  (*tint_module_vars.sb).mat4x4_f32 = float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f));
+  (*tint_module_vars.sb).mat2x2_f16 = half2x2(half2(0.0h), half2(0.0h));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).mat2x3_f16), half2x3(half3(0.0h), half3(0.0h)));
+  (*tint_module_vars.sb).mat2x4_f16 = half2x4(half4(0.0h), half4(0.0h));
+  (*tint_module_vars.sb).mat3x2_f16 = half3x2(half2(0.0h), half2(0.0h), half2(0.0h));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).mat3x3_f16), half3x3(half3(0.0h), half3(0.0h), half3(0.0h)));
+  (*tint_module_vars.sb).mat3x4_f16 = half3x4(half4(0.0h), half4(0.0h), half4(0.0h));
+  (*tint_module_vars.sb).mat4x2_f16 = half4x2(half2(0.0h), half2(0.0h), half2(0.0h), half2(0.0h));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).mat4x3_f16), half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h)));
+  (*tint_module_vars.sb).mat4x4_f16 = half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h));
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).arr2_vec3_f32), tint_array<float3, 2>{});
+  (*tint_module_vars.sb).arr2_mat4x2_f16 = tint_array<half4x2, 2>{};
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).struct_inner), Inner{});
+  tint_store_and_preserve_padding((&(*tint_module_vars.sb).array_struct_inner), tint_array<Inner, 4>{});
+}
diff --git a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.ir.msl b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.ir.msl
index 9c490ec..43f2d67 100644
--- a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.ir.msl
@@ -1,201 +1,95 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec4_f32:vec4<f32> @offset(96)
-  vec4_i32:vec4<i32> @offset(112)
-  vec4_u32:vec4<u32> @offset(128)
-  mat2x2_f32:mat2x2<f32> @offset(144)
-  mat2x3_f32:mat2x3<f32> @offset(160)
-  mat2x4_f32:mat2x4<f32> @offset(192)
-  mat3x2_f32:mat3x2<f32> @offset(224)
-  mat3x3_f32:mat3x3<f32> @offset(256)
-  mat3x4_f32:mat3x4<f32> @offset(304)
-  mat4x2_f32:mat4x2<f32> @offset(352)
-  mat4x3_f32:mat4x3<f32> @offset(384)
-  mat4x4_f32:mat4x4<f32> @offset(448)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(512)
-}
+struct Inner {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  tint_array<float3, 2> arr2_vec3_f32;
+};
+struct S {
+  tint_array<Inner, 8> arr;
+};
+struct tint_module_vars_struct {
+  const constant S* ub;
+  device int* s;
+};
 
-S = struct @align(16) {
-  arr:array<Inner, 8> @offset(0)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-$B1: {  # root
-  %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+void tint_symbol_inner(uint idx, tint_module_vars_struct tint_module_vars) {
+  float const scalar_f32 = (*tint_module_vars.ub).arr[idx].scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.ub).arr[idx].scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.ub).arr[idx].scalar_u32;
+  float2 const vec2_f32 = (*tint_module_vars.ub).arr[idx].vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.ub).arr[idx].vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.ub).arr[idx].vec2_u32;
+  float3 const vec3_f32 = (*tint_module_vars.ub).arr[idx].vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.ub).arr[idx].vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.ub).arr[idx].vec3_u32;
+  float4 const vec4_f32 = (*tint_module_vars.ub).arr[idx].vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.ub).arr[idx].vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.ub).arr[idx].vec4_u32;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.ub).arr[idx].mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.ub).arr[idx].mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.ub).arr[idx].mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.ub).arr[idx].mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.ub).arr[idx].mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.ub).arr[idx].mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.ub).arr[idx].mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.ub).arr[idx].mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.ub).arr[idx].mat4x4_f32;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.ub).arr[idx].arr2_vec3_f32;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = ((v_1 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_3 = (v_2 + int(vec2_u32[0u]));
+  int const v_4 = ((v_3 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_5 = (v_4 + int(vec3_u32[1u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_7 = (v_6 + int(vec4_u32[2u]));
+  int const v_8 = (v_7 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_9 = (v_8 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_10 = (v_9 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_11 = (v_10 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  (*tint_module_vars.s) = (v_16 + tint_f32_to_i32(arr2_vec3_f32[0][0u]));
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
-  $B2: {
-    %5:ptr<uniform, f32, read> = access %ub, 0u, %idx, 0u
-    %6:f32 = load %5
-    %scalar_f32:f32 = let %6
-    %8:ptr<uniform, i32, read> = access %ub, 0u, %idx, 1u
-    %9:i32 = load %8
-    %scalar_i32:i32 = let %9
-    %11:ptr<uniform, u32, read> = access %ub, 0u, %idx, 2u
-    %12:u32 = load %11
-    %scalar_u32:u32 = let %12
-    %14:ptr<uniform, vec2<f32>, read> = access %ub, 0u, %idx, 3u
-    %15:vec2<f32> = load %14
-    %vec2_f32:vec2<f32> = let %15
-    %17:ptr<uniform, vec2<i32>, read> = access %ub, 0u, %idx, 4u
-    %18:vec2<i32> = load %17
-    %vec2_i32:vec2<i32> = let %18
-    %20:ptr<uniform, vec2<u32>, read> = access %ub, 0u, %idx, 5u
-    %21:vec2<u32> = load %20
-    %vec2_u32:vec2<u32> = let %21
-    %23:ptr<uniform, vec3<f32>, read> = access %ub, 0u, %idx, 6u
-    %24:vec3<f32> = load %23
-    %vec3_f32:vec3<f32> = let %24
-    %26:ptr<uniform, vec3<i32>, read> = access %ub, 0u, %idx, 7u
-    %27:vec3<i32> = load %26
-    %vec3_i32:vec3<i32> = let %27
-    %29:ptr<uniform, vec3<u32>, read> = access %ub, 0u, %idx, 8u
-    %30:vec3<u32> = load %29
-    %vec3_u32:vec3<u32> = let %30
-    %32:ptr<uniform, vec4<f32>, read> = access %ub, 0u, %idx, 9u
-    %33:vec4<f32> = load %32
-    %vec4_f32:vec4<f32> = let %33
-    %35:ptr<uniform, vec4<i32>, read> = access %ub, 0u, %idx, 10u
-    %36:vec4<i32> = load %35
-    %vec4_i32:vec4<i32> = let %36
-    %38:ptr<uniform, vec4<u32>, read> = access %ub, 0u, %idx, 11u
-    %39:vec4<u32> = load %38
-    %vec4_u32:vec4<u32> = let %39
-    %41:ptr<uniform, mat2x2<f32>, read> = access %ub, 0u, %idx, 12u
-    %42:mat2x2<f32> = load %41
-    %mat2x2_f32:mat2x2<f32> = let %42
-    %44:ptr<uniform, mat2x3<f32>, read> = access %ub, 0u, %idx, 13u
-    %45:mat2x3<f32> = load %44
-    %mat2x3_f32:mat2x3<f32> = let %45
-    %47:ptr<uniform, mat2x4<f32>, read> = access %ub, 0u, %idx, 14u
-    %48:mat2x4<f32> = load %47
-    %mat2x4_f32:mat2x4<f32> = let %48
-    %50:ptr<uniform, mat3x2<f32>, read> = access %ub, 0u, %idx, 15u
-    %51:mat3x2<f32> = load %50
-    %mat3x2_f32:mat3x2<f32> = let %51
-    %53:ptr<uniform, mat3x3<f32>, read> = access %ub, 0u, %idx, 16u
-    %54:mat3x3<f32> = load %53
-    %mat3x3_f32:mat3x3<f32> = let %54
-    %56:ptr<uniform, mat3x4<f32>, read> = access %ub, 0u, %idx, 17u
-    %57:mat3x4<f32> = load %56
-    %mat3x4_f32:mat3x4<f32> = let %57
-    %59:ptr<uniform, mat4x2<f32>, read> = access %ub, 0u, %idx, 18u
-    %60:mat4x2<f32> = load %59
-    %mat4x2_f32:mat4x2<f32> = let %60
-    %62:ptr<uniform, mat4x3<f32>, read> = access %ub, 0u, %idx, 19u
-    %63:mat4x3<f32> = load %62
-    %mat4x3_f32:mat4x3<f32> = let %63
-    %65:ptr<uniform, mat4x4<f32>, read> = access %ub, 0u, %idx, 20u
-    %66:mat4x4<f32> = load %65
-    %mat4x4_f32:mat4x4<f32> = let %66
-    %68:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 0u, %idx, 21u
-    %69:array<vec3<f32>, 2> = load %68
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %69
-    %71:i32 = call %tint_f32_to_i32, %scalar_f32
-    %73:i32 = add %71, %scalar_i32
-    %74:i32 = let %73
-    %75:i32 = convert %scalar_u32
-    %76:i32 = add %74, %75
-    %77:i32 = let %76
-    %78:f32 = access %vec2_f32, 0u
-    %79:i32 = call %tint_f32_to_i32, %78
-    %80:i32 = add %77, %79
-    %81:i32 = access %vec2_i32, 0u
-    %82:i32 = add %80, %81
-    %83:i32 = let %82
-    %84:u32 = access %vec2_u32, 0u
-    %85:i32 = convert %84
-    %86:i32 = add %83, %85
-    %87:i32 = let %86
-    %88:f32 = access %vec3_f32, 1u
-    %89:i32 = call %tint_f32_to_i32, %88
-    %90:i32 = add %87, %89
-    %91:i32 = access %vec3_i32, 1u
-    %92:i32 = add %90, %91
-    %93:i32 = let %92
-    %94:u32 = access %vec3_u32, 1u
-    %95:i32 = convert %94
-    %96:i32 = add %93, %95
-    %97:i32 = let %96
-    %98:f32 = access %vec4_f32, 2u
-    %99:i32 = call %tint_f32_to_i32, %98
-    %100:i32 = add %97, %99
-    %101:i32 = access %vec4_i32, 2u
-    %102:i32 = add %100, %101
-    %103:i32 = let %102
-    %104:u32 = access %vec4_u32, 2u
-    %105:i32 = convert %104
-    %106:i32 = add %103, %105
-    %107:i32 = let %106
-    %108:f32 = access %mat2x2_f32, 0i, 0u
-    %109:i32 = call %tint_f32_to_i32, %108
-    %110:i32 = add %107, %109
-    %111:i32 = let %110
-    %112:f32 = access %mat2x3_f32, 0i, 0u
-    %113:i32 = call %tint_f32_to_i32, %112
-    %114:i32 = add %111, %113
-    %115:i32 = let %114
-    %116:f32 = access %mat2x4_f32, 0i, 0u
-    %117:i32 = call %tint_f32_to_i32, %116
-    %118:i32 = add %115, %117
-    %119:i32 = let %118
-    %120:f32 = access %mat3x2_f32, 0i, 0u
-    %121:i32 = call %tint_f32_to_i32, %120
-    %122:i32 = add %119, %121
-    %123:i32 = let %122
-    %124:f32 = access %mat3x3_f32, 0i, 0u
-    %125:i32 = call %tint_f32_to_i32, %124
-    %126:i32 = add %123, %125
-    %127:i32 = let %126
-    %128:f32 = access %mat3x4_f32, 0i, 0u
-    %129:i32 = call %tint_f32_to_i32, %128
-    %130:i32 = add %127, %129
-    %131:i32 = let %130
-    %132:f32 = access %mat4x2_f32, 0i, 0u
-    %133:i32 = call %tint_f32_to_i32, %132
-    %134:i32 = add %131, %133
-    %135:i32 = let %134
-    %136:f32 = access %mat4x3_f32, 0i, 0u
-    %137:i32 = call %tint_f32_to_i32, %136
-    %138:i32 = add %135, %137
-    %139:i32 = let %138
-    %140:f32 = access %mat4x4_f32, 0i, 0u
-    %141:i32 = call %tint_f32_to_i32, %140
-    %142:i32 = add %139, %141
-    %143:i32 = let %142
-    %144:f32 = access %arr2_vec3_f32, 0i, 0u
-    %145:i32 = call %tint_f32_to_i32, %144
-    %146:i32 = add %143, %145
-    store %s, %146
-    ret
-  }
+kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], const constant S* ub [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.ub=ub, .s=s};
+  tint_symbol_inner(idx, tint_module_vars);
 }
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %148:i32 = convert %value
-    %149:bool = gte %value, -2147483648.0f
-    %150:i32 = select -2147483648i, %148, %149
-    %151:bool = lte %value, 2147483520.0f
-    %152:i32 = select 2147483647i, %150, %151
-    ret %152
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.ir.msl
index 2d60972..969785b 100644
--- a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.ir.msl
@@ -1,322 +1,140 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  scalar_f16:f16 @offset(12)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec2_f16:vec2<f16> @offset(40)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec3_f16:vec3<f16> @offset(96)
-  vec4_f32:vec4<f32> @offset(112)
-  vec4_i32:vec4<i32> @offset(128)
-  vec4_u32:vec4<u32> @offset(144)
-  vec4_f16:vec4<f16> @offset(160)
-  mat2x2_f32:mat2x2<f32> @offset(168)
-  mat2x3_f32:mat2x3<f32> @offset(192)
-  mat2x4_f32:mat2x4<f32> @offset(224)
-  mat3x2_f32:mat3x2<f32> @offset(256)
-  mat3x3_f32:mat3x3<f32> @offset(288)
-  mat3x4_f32:mat3x4<f32> @offset(336)
-  mat4x2_f32:mat4x2<f32> @offset(384)
-  mat4x3_f32:mat4x3<f32> @offset(416)
-  mat4x4_f32:mat4x4<f32> @offset(480)
-  mat2x2_f16:mat2x2<f16> @offset(544)
-  mat2x3_f16:mat2x3<f16> @offset(552)
-  mat2x4_f16:mat2x4<f16> @offset(568)
-  mat3x2_f16:mat3x2<f16> @offset(584)
-  mat3x3_f16:mat3x3<f16> @offset(600)
-  mat3x4_f16:mat3x4<f16> @offset(624)
-  mat4x2_f16:mat4x2<f16> @offset(648)
-  mat4x3_f16:mat4x3<f16> @offset(664)
-  mat4x4_f16:mat4x4<f16> @offset(696)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(736)
-  arr2_mat4x2_f16:array<mat4x2<f16>, 2> @offset(768)
-}
+struct Inner {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  half scalar_f16;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  half2 vec2_f16;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  half3 vec3_f16;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  half4 vec4_f16;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  half2x2 mat2x2_f16;
+  half2x3 mat2x3_f16;
+  half2x4 mat2x4_f16;
+  half3x2 mat3x2_f16;
+  half3x3 mat3x3_f16;
+  half3x4 mat3x4_f16;
+  half4x2 mat4x2_f16;
+  half4x3 mat4x3_f16;
+  half4x4 mat4x4_f16;
+  tint_array<float3, 2> arr2_vec3_f32;
+  tint_array<half4x2, 2> arr2_mat4x2_f16;
+};
+struct S {
+  tint_array<Inner, 8> arr;
+};
+struct tint_module_vars_struct {
+  const constant S* ub;
+  device int* s;
+};
 
-S = struct @align(16) {
-  arr:array<Inner, 8> @offset(0)
+int tint_f16_to_i32(half value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -65504.0h)), (value <= 65504.0h));
 }
-
-$B1: {  # root
-  %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func(%idx:u32 [@local_invocation_index]):void {
-  $B2: {
-    %5:ptr<uniform, f32, read> = access %ub, 0u, %idx, 0u
-    %6:f32 = load %5
-    %scalar_f32:f32 = let %6
-    %8:ptr<uniform, i32, read> = access %ub, 0u, %idx, 1u
-    %9:i32 = load %8
-    %scalar_i32:i32 = let %9
-    %11:ptr<uniform, u32, read> = access %ub, 0u, %idx, 2u
-    %12:u32 = load %11
-    %scalar_u32:u32 = let %12
-    %14:ptr<uniform, f16, read> = access %ub, 0u, %idx, 3u
-    %15:f16 = load %14
-    %scalar_f16:f16 = let %15
-    %17:ptr<uniform, vec2<f32>, read> = access %ub, 0u, %idx, 4u
-    %18:vec2<f32> = load %17
-    %vec2_f32:vec2<f32> = let %18
-    %20:ptr<uniform, vec2<i32>, read> = access %ub, 0u, %idx, 5u
-    %21:vec2<i32> = load %20
-    %vec2_i32:vec2<i32> = let %21
-    %23:ptr<uniform, vec2<u32>, read> = access %ub, 0u, %idx, 6u
-    %24:vec2<u32> = load %23
-    %vec2_u32:vec2<u32> = let %24
-    %26:ptr<uniform, vec2<f16>, read> = access %ub, 0u, %idx, 7u
-    %27:vec2<f16> = load %26
-    %vec2_f16:vec2<f16> = let %27
-    %29:ptr<uniform, vec3<f32>, read> = access %ub, 0u, %idx, 8u
-    %30:vec3<f32> = load %29
-    %vec3_f32:vec3<f32> = let %30
-    %32:ptr<uniform, vec3<i32>, read> = access %ub, 0u, %idx, 9u
-    %33:vec3<i32> = load %32
-    %vec3_i32:vec3<i32> = let %33
-    %35:ptr<uniform, vec3<u32>, read> = access %ub, 0u, %idx, 10u
-    %36:vec3<u32> = load %35
-    %vec3_u32:vec3<u32> = let %36
-    %38:ptr<uniform, vec3<f16>, read> = access %ub, 0u, %idx, 11u
-    %39:vec3<f16> = load %38
-    %vec3_f16:vec3<f16> = let %39
-    %41:ptr<uniform, vec4<f32>, read> = access %ub, 0u, %idx, 12u
-    %42:vec4<f32> = load %41
-    %vec4_f32:vec4<f32> = let %42
-    %44:ptr<uniform, vec4<i32>, read> = access %ub, 0u, %idx, 13u
-    %45:vec4<i32> = load %44
-    %vec4_i32:vec4<i32> = let %45
-    %47:ptr<uniform, vec4<u32>, read> = access %ub, 0u, %idx, 14u
-    %48:vec4<u32> = load %47
-    %vec4_u32:vec4<u32> = let %48
-    %50:ptr<uniform, vec4<f16>, read> = access %ub, 0u, %idx, 15u
-    %51:vec4<f16> = load %50
-    %vec4_f16:vec4<f16> = let %51
-    %53:ptr<uniform, mat2x2<f32>, read> = access %ub, 0u, %idx, 16u
-    %54:mat2x2<f32> = load %53
-    %mat2x2_f32:mat2x2<f32> = let %54
-    %56:ptr<uniform, mat2x3<f32>, read> = access %ub, 0u, %idx, 17u
-    %57:mat2x3<f32> = load %56
-    %mat2x3_f32:mat2x3<f32> = let %57
-    %59:ptr<uniform, mat2x4<f32>, read> = access %ub, 0u, %idx, 18u
-    %60:mat2x4<f32> = load %59
-    %mat2x4_f32:mat2x4<f32> = let %60
-    %62:ptr<uniform, mat3x2<f32>, read> = access %ub, 0u, %idx, 19u
-    %63:mat3x2<f32> = load %62
-    %mat3x2_f32:mat3x2<f32> = let %63
-    %65:ptr<uniform, mat3x3<f32>, read> = access %ub, 0u, %idx, 20u
-    %66:mat3x3<f32> = load %65
-    %mat3x3_f32:mat3x3<f32> = let %66
-    %68:ptr<uniform, mat3x4<f32>, read> = access %ub, 0u, %idx, 21u
-    %69:mat3x4<f32> = load %68
-    %mat3x4_f32:mat3x4<f32> = let %69
-    %71:ptr<uniform, mat4x2<f32>, read> = access %ub, 0u, %idx, 22u
-    %72:mat4x2<f32> = load %71
-    %mat4x2_f32:mat4x2<f32> = let %72
-    %74:ptr<uniform, mat4x3<f32>, read> = access %ub, 0u, %idx, 23u
-    %75:mat4x3<f32> = load %74
-    %mat4x3_f32:mat4x3<f32> = let %75
-    %77:ptr<uniform, mat4x4<f32>, read> = access %ub, 0u, %idx, 24u
-    %78:mat4x4<f32> = load %77
-    %mat4x4_f32:mat4x4<f32> = let %78
-    %80:ptr<uniform, mat2x2<f16>, read> = access %ub, 0u, %idx, 25u
-    %81:mat2x2<f16> = load %80
-    %mat2x2_f16:mat2x2<f16> = let %81
-    %83:ptr<uniform, mat2x3<f16>, read> = access %ub, 0u, %idx, 26u
-    %84:mat2x3<f16> = load %83
-    %mat2x3_f16:mat2x3<f16> = let %84
-    %86:ptr<uniform, mat2x4<f16>, read> = access %ub, 0u, %idx, 27u
-    %87:mat2x4<f16> = load %86
-    %mat2x4_f16:mat2x4<f16> = let %87
-    %89:ptr<uniform, mat3x2<f16>, read> = access %ub, 0u, %idx, 28u
-    %90:mat3x2<f16> = load %89
-    %mat3x2_f16:mat3x2<f16> = let %90
-    %92:ptr<uniform, mat3x3<f16>, read> = access %ub, 0u, %idx, 29u
-    %93:mat3x3<f16> = load %92
-    %mat3x3_f16:mat3x3<f16> = let %93
-    %95:ptr<uniform, mat3x4<f16>, read> = access %ub, 0u, %idx, 30u
-    %96:mat3x4<f16> = load %95
-    %mat3x4_f16:mat3x4<f16> = let %96
-    %98:ptr<uniform, mat4x2<f16>, read> = access %ub, 0u, %idx, 31u
-    %99:mat4x2<f16> = load %98
-    %mat4x2_f16:mat4x2<f16> = let %99
-    %101:ptr<uniform, mat4x3<f16>, read> = access %ub, 0u, %idx, 32u
-    %102:mat4x3<f16> = load %101
-    %mat4x3_f16:mat4x3<f16> = let %102
-    %104:ptr<uniform, mat4x4<f16>, read> = access %ub, 0u, %idx, 33u
-    %105:mat4x4<f16> = load %104
-    %mat4x4_f16:mat4x4<f16> = let %105
-    %107:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 0u, %idx, 34u
-    %108:array<vec3<f32>, 2> = load %107
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %108
-    %110:ptr<uniform, array<mat4x2<f16>, 2>, read> = access %ub, 0u, %idx, 35u
-    %111:array<mat4x2<f16>, 2> = load %110
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = let %111
-    %113:i32 = call %tint_f32_to_i32, %scalar_f32
-    %115:i32 = add %113, %scalar_i32
-    %116:i32 = let %115
-    %117:i32 = convert %scalar_u32
-    %118:i32 = add %116, %117
-    %119:i32 = let %118
-    %120:i32 = call %tint_f16_to_i32, %scalar_f16
-    %122:i32 = add %119, %120
-    %123:i32 = let %122
-    %124:f32 = access %vec2_f32, 0u
-    %125:i32 = call %tint_f32_to_i32, %124
-    %126:i32 = add %123, %125
-    %127:i32 = access %vec2_i32, 0u
-    %128:i32 = add %126, %127
-    %129:i32 = let %128
-    %130:u32 = access %vec2_u32, 0u
-    %131:i32 = convert %130
-    %132:i32 = add %129, %131
-    %133:i32 = let %132
-    %134:f16 = access %vec2_f16, 0u
-    %135:i32 = call %tint_f16_to_i32, %134
-    %136:i32 = add %133, %135
-    %137:i32 = let %136
-    %138:f32 = access %vec3_f32, 1u
-    %139:i32 = call %tint_f32_to_i32, %138
-    %140:i32 = add %137, %139
-    %141:i32 = access %vec3_i32, 1u
-    %142:i32 = add %140, %141
-    %143:i32 = let %142
-    %144:u32 = access %vec3_u32, 1u
-    %145:i32 = convert %144
-    %146:i32 = add %143, %145
-    %147:i32 = let %146
-    %148:f16 = access %vec3_f16, 1u
-    %149:i32 = call %tint_f16_to_i32, %148
-    %150:i32 = add %147, %149
-    %151:i32 = let %150
-    %152:f32 = access %vec4_f32, 2u
-    %153:i32 = call %tint_f32_to_i32, %152
-    %154:i32 = add %151, %153
-    %155:i32 = access %vec4_i32, 2u
-    %156:i32 = add %154, %155
-    %157:i32 = let %156
-    %158:u32 = access %vec4_u32, 2u
-    %159:i32 = convert %158
-    %160:i32 = add %157, %159
-    %161:i32 = let %160
-    %162:f16 = access %vec4_f16, 2u
-    %163:i32 = call %tint_f16_to_i32, %162
-    %164:i32 = add %161, %163
-    %165:i32 = let %164
-    %166:f32 = access %mat2x2_f32, 0i, 0u
-    %167:i32 = call %tint_f32_to_i32, %166
-    %168:i32 = add %165, %167
-    %169:i32 = let %168
-    %170:f32 = access %mat2x3_f32, 0i, 0u
-    %171:i32 = call %tint_f32_to_i32, %170
-    %172:i32 = add %169, %171
-    %173:i32 = let %172
-    %174:f32 = access %mat2x4_f32, 0i, 0u
-    %175:i32 = call %tint_f32_to_i32, %174
-    %176:i32 = add %173, %175
-    %177:i32 = let %176
-    %178:f32 = access %mat3x2_f32, 0i, 0u
-    %179:i32 = call %tint_f32_to_i32, %178
-    %180:i32 = add %177, %179
-    %181:i32 = let %180
-    %182:f32 = access %mat3x3_f32, 0i, 0u
-    %183:i32 = call %tint_f32_to_i32, %182
-    %184:i32 = add %181, %183
-    %185:i32 = let %184
-    %186:f32 = access %mat3x4_f32, 0i, 0u
-    %187:i32 = call %tint_f32_to_i32, %186
-    %188:i32 = add %185, %187
-    %189:i32 = let %188
-    %190:f32 = access %mat4x2_f32, 0i, 0u
-    %191:i32 = call %tint_f32_to_i32, %190
-    %192:i32 = add %189, %191
-    %193:i32 = let %192
-    %194:f32 = access %mat4x3_f32, 0i, 0u
-    %195:i32 = call %tint_f32_to_i32, %194
-    %196:i32 = add %193, %195
-    %197:i32 = let %196
-    %198:f32 = access %mat4x4_f32, 0i, 0u
-    %199:i32 = call %tint_f32_to_i32, %198
-    %200:i32 = add %197, %199
-    %201:i32 = let %200
-    %202:f16 = access %mat2x2_f16, 0i, 0u
-    %203:i32 = call %tint_f16_to_i32, %202
-    %204:i32 = add %201, %203
-    %205:i32 = let %204
-    %206:f16 = access %mat2x3_f16, 0i, 0u
-    %207:i32 = call %tint_f16_to_i32, %206
-    %208:i32 = add %205, %207
-    %209:i32 = let %208
-    %210:f16 = access %mat2x4_f16, 0i, 0u
-    %211:i32 = call %tint_f16_to_i32, %210
-    %212:i32 = add %209, %211
-    %213:i32 = let %212
-    %214:f16 = access %mat3x2_f16, 0i, 0u
-    %215:i32 = call %tint_f16_to_i32, %214
-    %216:i32 = add %213, %215
-    %217:i32 = let %216
-    %218:f16 = access %mat3x3_f16, 0i, 0u
-    %219:i32 = call %tint_f16_to_i32, %218
-    %220:i32 = add %217, %219
-    %221:i32 = let %220
-    %222:f16 = access %mat3x4_f16, 0i, 0u
-    %223:i32 = call %tint_f16_to_i32, %222
-    %224:i32 = add %221, %223
-    %225:i32 = let %224
-    %226:f16 = access %mat4x2_f16, 0i, 0u
-    %227:i32 = call %tint_f16_to_i32, %226
-    %228:i32 = add %225, %227
-    %229:i32 = let %228
-    %230:f16 = access %mat4x3_f16, 0i, 0u
-    %231:i32 = call %tint_f16_to_i32, %230
-    %232:i32 = add %229, %231
-    %233:i32 = let %232
-    %234:f16 = access %mat4x4_f16, 0i, 0u
-    %235:i32 = call %tint_f16_to_i32, %234
-    %236:i32 = add %233, %235
-    %237:i32 = let %236
-    %238:f32 = access %arr2_vec3_f32, 0i, 0u
-    %239:i32 = call %tint_f32_to_i32, %238
-    %240:i32 = add %237, %239
-    %241:i32 = let %240
-    %242:f16 = access %arr2_mat4x2_f16, 0i, 0i, 0u
-    %243:i32 = call %tint_f16_to_i32, %242
-    %244:i32 = add %241, %243
-    store %s, %244
-    ret
-  }
+void tint_symbol_inner(uint idx, tint_module_vars_struct tint_module_vars) {
+  float const scalar_f32 = (*tint_module_vars.ub).arr[idx].scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.ub).arr[idx].scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.ub).arr[idx].scalar_u32;
+  half const scalar_f16 = (*tint_module_vars.ub).arr[idx].scalar_f16;
+  float2 const vec2_f32 = (*tint_module_vars.ub).arr[idx].vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.ub).arr[idx].vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.ub).arr[idx].vec2_u32;
+  half2 const vec2_f16 = (*tint_module_vars.ub).arr[idx].vec2_f16;
+  float3 const vec3_f32 = (*tint_module_vars.ub).arr[idx].vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.ub).arr[idx].vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.ub).arr[idx].vec3_u32;
+  half3 const vec3_f16 = (*tint_module_vars.ub).arr[idx].vec3_f16;
+  float4 const vec4_f32 = (*tint_module_vars.ub).arr[idx].vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.ub).arr[idx].vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.ub).arr[idx].vec4_u32;
+  half4 const vec4_f16 = (*tint_module_vars.ub).arr[idx].vec4_f16;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.ub).arr[idx].mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.ub).arr[idx].mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.ub).arr[idx].mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.ub).arr[idx].mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.ub).arr[idx].mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.ub).arr[idx].mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.ub).arr[idx].mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.ub).arr[idx].mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.ub).arr[idx].mat4x4_f32;
+  half2x2 const mat2x2_f16 = (*tint_module_vars.ub).arr[idx].mat2x2_f16;
+  half2x3 const mat2x3_f16 = (*tint_module_vars.ub).arr[idx].mat2x3_f16;
+  half2x4 const mat2x4_f16 = (*tint_module_vars.ub).arr[idx].mat2x4_f16;
+  half3x2 const mat3x2_f16 = (*tint_module_vars.ub).arr[idx].mat3x2_f16;
+  half3x3 const mat3x3_f16 = (*tint_module_vars.ub).arr[idx].mat3x3_f16;
+  half3x4 const mat3x4_f16 = (*tint_module_vars.ub).arr[idx].mat3x4_f16;
+  half4x2 const mat4x2_f16 = (*tint_module_vars.ub).arr[idx].mat4x2_f16;
+  half4x3 const mat4x3_f16 = (*tint_module_vars.ub).arr[idx].mat4x3_f16;
+  half4x4 const mat4x4_f16 = (*tint_module_vars.ub).arr[idx].mat4x4_f16;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.ub).arr[idx].arr2_vec3_f32;
+  tint_array<half4x2, 2> const arr2_mat4x2_f16 = (*tint_module_vars.ub).arr[idx].arr2_mat4x2_f16;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = (v_1 + tint_f16_to_i32(scalar_f16));
+  int const v_3 = ((v_2 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_4 = (v_3 + int(vec2_u32[0u]));
+  int const v_5 = (v_4 + tint_f16_to_i32(vec2_f16[0u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_7 = (v_6 + int(vec3_u32[1u]));
+  int const v_8 = (v_7 + tint_f16_to_i32(vec3_f16[1u]));
+  int const v_9 = ((v_8 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_10 = (v_9 + int(vec4_u32[2u]));
+  int const v_11 = (v_10 + tint_f16_to_i32(vec4_f16[2u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_17 = (v_16 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_18 = (v_17 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_19 = (v_18 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_20 = (v_19 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  int const v_21 = (v_20 + tint_f16_to_i32(mat2x2_f16[0][0u]));
+  int const v_22 = (v_21 + tint_f16_to_i32(mat2x3_f16[0][0u]));
+  int const v_23 = (v_22 + tint_f16_to_i32(mat2x4_f16[0][0u]));
+  int const v_24 = (v_23 + tint_f16_to_i32(mat3x2_f16[0][0u]));
+  int const v_25 = (v_24 + tint_f16_to_i32(mat3x3_f16[0][0u]));
+  int const v_26 = (v_25 + tint_f16_to_i32(mat3x4_f16[0][0u]));
+  int const v_27 = (v_26 + tint_f16_to_i32(mat4x2_f16[0][0u]));
+  int const v_28 = (v_27 + tint_f16_to_i32(mat4x3_f16[0][0u]));
+  int const v_29 = (v_28 + tint_f16_to_i32(mat4x4_f16[0][0u]));
+  int const v_30 = (v_29 + tint_f32_to_i32(arr2_vec3_f32[0][0u]));
+  (*tint_module_vars.s) = (v_30 + tint_f16_to_i32(arr2_mat4x2_f16[0][0][0u]));
 }
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %246:i32 = convert %value
-    %247:bool = gte %value, -2147483648.0f
-    %248:i32 = select -2147483648i, %246, %247
-    %249:bool = lte %value, 2147483520.0f
-    %250:i32 = select 2147483647i, %248, %249
-    ret %250
-  }
+kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], const constant S* ub [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.ub=ub, .s=s};
+  tint_symbol_inner(idx, tint_module_vars);
 }
-%tint_f16_to_i32 = func(%value_1:f16):i32 {  # %value_1: 'value'
-  $B4: {
-    %252:i32 = convert %value_1
-    %253:bool = gte %value_1, -65504.0h
-    %254:i32 = select -2147483648i, %252, %253
-    %255:bool = lte %value_1, 65504.0h
-    %256:i32 = select 2147483647i, %254, %255
-    ret %256
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/uniform/static_index/read.wgsl.expected.ir.msl b/test/tint/buffer/uniform/static_index/read.wgsl.expected.ir.msl
index 2e14eb1..aa4123e 100644
--- a/test/tint/buffer/uniform/static_index/read.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/static_index/read.wgsl.expected.ir.msl
@@ -1,214 +1,97 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(16) {
-  scalar_i32:i32 @offset(0)
-  scalar_f32:f32 @offset(16)
-}
+struct Inner {
+  int scalar_i32;
+  float scalar_f32;
+};
+struct S {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  tint_array<float3, 2> arr2_vec3_f32;
+  Inner struct_inner;
+  tint_array<Inner, 4> array_struct_inner;
+};
+struct tint_module_vars_struct {
+  const constant S* ub;
+  device int* s;
+};
 
-S = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec4_f32:vec4<f32> @offset(96)
-  vec4_i32:vec4<i32> @offset(112)
-  vec4_u32:vec4<u32> @offset(128)
-  mat2x2_f32:mat2x2<f32> @offset(144)
-  mat2x3_f32:mat2x3<f32> @offset(160)
-  mat2x4_f32:mat2x4<f32> @offset(192)
-  mat3x2_f32:mat3x2<f32> @offset(224)
-  mat3x3_f32:mat3x3<f32> @offset(256)
-  mat3x4_f32:mat3x4<f32> @offset(304)
-  mat4x2_f32:mat4x2<f32> @offset(352)
-  mat4x3_f32:mat4x3<f32> @offset(384)
-  mat4x4_f32:mat4x4<f32> @offset(448)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(512)
-  struct_inner:Inner @offset(544)
-  array_struct_inner:array<Inner, 4> @offset(576)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-$B1: {  # root
-  %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+kernel void tint_symbol(const constant S* ub [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.ub=ub, .s=s};
+  float const scalar_f32 = (*tint_module_vars.ub).scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.ub).scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.ub).scalar_u32;
+  float2 const vec2_f32 = (*tint_module_vars.ub).vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.ub).vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.ub).vec2_u32;
+  float3 const vec3_f32 = (*tint_module_vars.ub).vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.ub).vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.ub).vec3_u32;
+  float4 const vec4_f32 = (*tint_module_vars.ub).vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.ub).vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.ub).vec4_u32;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.ub).mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.ub).mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.ub).mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.ub).mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.ub).mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.ub).mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.ub).mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.ub).mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.ub).mat4x4_f32;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.ub).arr2_vec3_f32;
+  Inner const struct_inner = (*tint_module_vars.ub).struct_inner;
+  tint_array<Inner, 4> const array_struct_inner = (*tint_module_vars.ub).array_struct_inner;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = ((v_1 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_3 = (v_2 + int(vec2_u32[0u]));
+  int const v_4 = ((v_3 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_5 = (v_4 + int(vec3_u32[1u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_7 = (v_6 + int(vec4_u32[2u]));
+  int const v_8 = (v_7 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_9 = (v_8 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_10 = (v_9 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_11 = (v_10 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  (*tint_module_vars.s) = (((v_16 + tint_f32_to_i32(arr2_vec3_f32[0][0u])) + struct_inner.scalar_i32) + array_struct_inner[0].scalar_i32);
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
-  $B2: {
-    %4:ptr<uniform, f32, read> = access %ub, 0u
-    %5:f32 = load %4
-    %scalar_f32:f32 = let %5
-    %7:ptr<uniform, i32, read> = access %ub, 1u
-    %8:i32 = load %7
-    %scalar_i32:i32 = let %8
-    %10:ptr<uniform, u32, read> = access %ub, 2u
-    %11:u32 = load %10
-    %scalar_u32:u32 = let %11
-    %13:ptr<uniform, vec2<f32>, read> = access %ub, 3u
-    %14:vec2<f32> = load %13
-    %vec2_f32:vec2<f32> = let %14
-    %16:ptr<uniform, vec2<i32>, read> = access %ub, 4u
-    %17:vec2<i32> = load %16
-    %vec2_i32:vec2<i32> = let %17
-    %19:ptr<uniform, vec2<u32>, read> = access %ub, 5u
-    %20:vec2<u32> = load %19
-    %vec2_u32:vec2<u32> = let %20
-    %22:ptr<uniform, vec3<f32>, read> = access %ub, 6u
-    %23:vec3<f32> = load %22
-    %vec3_f32:vec3<f32> = let %23
-    %25:ptr<uniform, vec3<i32>, read> = access %ub, 7u
-    %26:vec3<i32> = load %25
-    %vec3_i32:vec3<i32> = let %26
-    %28:ptr<uniform, vec3<u32>, read> = access %ub, 8u
-    %29:vec3<u32> = load %28
-    %vec3_u32:vec3<u32> = let %29
-    %31:ptr<uniform, vec4<f32>, read> = access %ub, 9u
-    %32:vec4<f32> = load %31
-    %vec4_f32:vec4<f32> = let %32
-    %34:ptr<uniform, vec4<i32>, read> = access %ub, 10u
-    %35:vec4<i32> = load %34
-    %vec4_i32:vec4<i32> = let %35
-    %37:ptr<uniform, vec4<u32>, read> = access %ub, 11u
-    %38:vec4<u32> = load %37
-    %vec4_u32:vec4<u32> = let %38
-    %40:ptr<uniform, mat2x2<f32>, read> = access %ub, 12u
-    %41:mat2x2<f32> = load %40
-    %mat2x2_f32:mat2x2<f32> = let %41
-    %43:ptr<uniform, mat2x3<f32>, read> = access %ub, 13u
-    %44:mat2x3<f32> = load %43
-    %mat2x3_f32:mat2x3<f32> = let %44
-    %46:ptr<uniform, mat2x4<f32>, read> = access %ub, 14u
-    %47:mat2x4<f32> = load %46
-    %mat2x4_f32:mat2x4<f32> = let %47
-    %49:ptr<uniform, mat3x2<f32>, read> = access %ub, 15u
-    %50:mat3x2<f32> = load %49
-    %mat3x2_f32:mat3x2<f32> = let %50
-    %52:ptr<uniform, mat3x3<f32>, read> = access %ub, 16u
-    %53:mat3x3<f32> = load %52
-    %mat3x3_f32:mat3x3<f32> = let %53
-    %55:ptr<uniform, mat3x4<f32>, read> = access %ub, 17u
-    %56:mat3x4<f32> = load %55
-    %mat3x4_f32:mat3x4<f32> = let %56
-    %58:ptr<uniform, mat4x2<f32>, read> = access %ub, 18u
-    %59:mat4x2<f32> = load %58
-    %mat4x2_f32:mat4x2<f32> = let %59
-    %61:ptr<uniform, mat4x3<f32>, read> = access %ub, 19u
-    %62:mat4x3<f32> = load %61
-    %mat4x3_f32:mat4x3<f32> = let %62
-    %64:ptr<uniform, mat4x4<f32>, read> = access %ub, 20u
-    %65:mat4x4<f32> = load %64
-    %mat4x4_f32:mat4x4<f32> = let %65
-    %67:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 21u
-    %68:array<vec3<f32>, 2> = load %67
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %68
-    %70:ptr<uniform, Inner, read> = access %ub, 22u
-    %71:Inner = load %70
-    %struct_inner:Inner = let %71
-    %73:ptr<uniform, array<Inner, 4>, read> = access %ub, 23u
-    %74:array<Inner, 4> = load %73
-    %array_struct_inner:array<Inner, 4> = let %74
-    %76:i32 = call %tint_f32_to_i32, %scalar_f32
-    %78:i32 = add %76, %scalar_i32
-    %79:i32 = let %78
-    %80:i32 = convert %scalar_u32
-    %81:i32 = add %79, %80
-    %82:i32 = let %81
-    %83:f32 = access %vec2_f32, 0u
-    %84:i32 = call %tint_f32_to_i32, %83
-    %85:i32 = add %82, %84
-    %86:i32 = access %vec2_i32, 0u
-    %87:i32 = add %85, %86
-    %88:i32 = let %87
-    %89:u32 = access %vec2_u32, 0u
-    %90:i32 = convert %89
-    %91:i32 = add %88, %90
-    %92:i32 = let %91
-    %93:f32 = access %vec3_f32, 1u
-    %94:i32 = call %tint_f32_to_i32, %93
-    %95:i32 = add %92, %94
-    %96:i32 = access %vec3_i32, 1u
-    %97:i32 = add %95, %96
-    %98:i32 = let %97
-    %99:u32 = access %vec3_u32, 1u
-    %100:i32 = convert %99
-    %101:i32 = add %98, %100
-    %102:i32 = let %101
-    %103:f32 = access %vec4_f32, 2u
-    %104:i32 = call %tint_f32_to_i32, %103
-    %105:i32 = add %102, %104
-    %106:i32 = access %vec4_i32, 2u
-    %107:i32 = add %105, %106
-    %108:i32 = let %107
-    %109:u32 = access %vec4_u32, 2u
-    %110:i32 = convert %109
-    %111:i32 = add %108, %110
-    %112:i32 = let %111
-    %113:f32 = access %mat2x2_f32, 0i, 0u
-    %114:i32 = call %tint_f32_to_i32, %113
-    %115:i32 = add %112, %114
-    %116:i32 = let %115
-    %117:f32 = access %mat2x3_f32, 0i, 0u
-    %118:i32 = call %tint_f32_to_i32, %117
-    %119:i32 = add %116, %118
-    %120:i32 = let %119
-    %121:f32 = access %mat2x4_f32, 0i, 0u
-    %122:i32 = call %tint_f32_to_i32, %121
-    %123:i32 = add %120, %122
-    %124:i32 = let %123
-    %125:f32 = access %mat3x2_f32, 0i, 0u
-    %126:i32 = call %tint_f32_to_i32, %125
-    %127:i32 = add %124, %126
-    %128:i32 = let %127
-    %129:f32 = access %mat3x3_f32, 0i, 0u
-    %130:i32 = call %tint_f32_to_i32, %129
-    %131:i32 = add %128, %130
-    %132:i32 = let %131
-    %133:f32 = access %mat3x4_f32, 0i, 0u
-    %134:i32 = call %tint_f32_to_i32, %133
-    %135:i32 = add %132, %134
-    %136:i32 = let %135
-    %137:f32 = access %mat4x2_f32, 0i, 0u
-    %138:i32 = call %tint_f32_to_i32, %137
-    %139:i32 = add %136, %138
-    %140:i32 = let %139
-    %141:f32 = access %mat4x3_f32, 0i, 0u
-    %142:i32 = call %tint_f32_to_i32, %141
-    %143:i32 = add %140, %142
-    %144:i32 = let %143
-    %145:f32 = access %mat4x4_f32, 0i, 0u
-    %146:i32 = call %tint_f32_to_i32, %145
-    %147:i32 = add %144, %146
-    %148:i32 = let %147
-    %149:f32 = access %arr2_vec3_f32, 0i, 0u
-    %150:i32 = call %tint_f32_to_i32, %149
-    %151:i32 = add %148, %150
-    %152:i32 = access %struct_inner, 0u
-    %153:i32 = add %151, %152
-    %154:i32 = access %array_struct_inner, 0i, 0u
-    %155:i32 = add %153, %154
-    store %s, %155
-    ret
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %157:i32 = convert %value
-    %158:bool = gte %value, -2147483648.0f
-    %159:i32 = select -2147483648i, %157, %158
-    %160:bool = lte %value, 2147483520.0f
-    %161:i32 = select 2147483647i, %159, %160
-    ret %161
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.ir.msl b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.ir.msl
index 3f18691..364aeac 100644
--- a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.ir.msl
+++ b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.ir.msl
@@ -1,336 +1,143 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+template<typename T, size_t N>
+struct tint_array {
+  const constant T& operator[](size_t i) const constant { return elements[i]; }
+  device T& operator[](size_t i) device { return elements[i]; }
+  const device T& operator[](size_t i) const device { return elements[i]; }
+  thread T& operator[](size_t i) thread { return elements[i]; }
+  const thread T& operator[](size_t i) const thread { return elements[i]; }
+  threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
+  const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
+  T elements[N];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: Inner = struct @align(4) {
-  scalar_i32:i32 @offset(0)
-  scalar_f32:f32 @offset(4)
-  scalar_f16:f16 @offset(8)
-}
+struct Inner {
+  int scalar_i32;
+  float scalar_f32;
+  half scalar_f16;
+};
+struct S {
+  float scalar_f32;
+  int scalar_i32;
+  uint scalar_u32;
+  half scalar_f16;
+  float2 vec2_f32;
+  int2 vec2_i32;
+  uint2 vec2_u32;
+  half2 vec2_f16;
+  float3 vec3_f32;
+  int3 vec3_i32;
+  uint3 vec3_u32;
+  half3 vec3_f16;
+  float4 vec4_f32;
+  int4 vec4_i32;
+  uint4 vec4_u32;
+  half4 vec4_f16;
+  float2x2 mat2x2_f32;
+  float2x3 mat2x3_f32;
+  float2x4 mat2x4_f32;
+  float3x2 mat3x2_f32;
+  float3x3 mat3x3_f32;
+  float3x4 mat3x4_f32;
+  float4x2 mat4x2_f32;
+  float4x3 mat4x3_f32;
+  float4x4 mat4x4_f32;
+  half2x2 mat2x2_f16;
+  half2x3 mat2x3_f16;
+  half2x4 mat2x4_f16;
+  half3x2 mat3x2_f16;
+  half3x3 mat3x3_f16;
+  half3x4 mat3x4_f16;
+  half4x2 mat4x2_f16;
+  half4x3 mat4x3_f16;
+  half4x4 mat4x4_f16;
+  tint_array<float3, 2> arr2_vec3_f32;
+  tint_array<half4x2, 2> arr2_mat4x2_f16;
+  Inner struct_inner;
+  tint_array<Inner, 4> array_struct_inner;
+};
+struct tint_module_vars_struct {
+  const constant S* ub;
+  device int* s;
+};
 
-S = struct @align(16) {
-  scalar_f32:f32 @offset(0)
-  scalar_i32:i32 @offset(4)
-  scalar_u32:u32 @offset(8)
-  scalar_f16:f16 @offset(12)
-  vec2_f32:vec2<f32> @offset(16)
-  vec2_i32:vec2<i32> @offset(24)
-  vec2_u32:vec2<u32> @offset(32)
-  vec2_f16:vec2<f16> @offset(40)
-  vec3_f32:vec3<f32> @offset(48)
-  vec3_i32:vec3<i32> @offset(64)
-  vec3_u32:vec3<u32> @offset(80)
-  vec3_f16:vec3<f16> @offset(96)
-  vec4_f32:vec4<f32> @offset(112)
-  vec4_i32:vec4<i32> @offset(128)
-  vec4_u32:vec4<u32> @offset(144)
-  vec4_f16:vec4<f16> @offset(160)
-  mat2x2_f32:mat2x2<f32> @offset(168)
-  mat2x3_f32:mat2x3<f32> @offset(192)
-  mat2x4_f32:mat2x4<f32> @offset(224)
-  mat3x2_f32:mat3x2<f32> @offset(256)
-  mat3x3_f32:mat3x3<f32> @offset(288)
-  mat3x4_f32:mat3x4<f32> @offset(336)
-  mat4x2_f32:mat4x2<f32> @offset(384)
-  mat4x3_f32:mat4x3<f32> @offset(416)
-  mat4x4_f32:mat4x4<f32> @offset(480)
-  mat2x2_f16:mat2x2<f16> @offset(544)
-  mat2x3_f16:mat2x3<f16> @offset(552)
-  mat2x4_f16:mat2x4<f16> @offset(568)
-  mat3x2_f16:mat3x2<f16> @offset(584)
-  mat3x3_f16:mat3x3<f16> @offset(600)
-  mat3x4_f16:mat3x4<f16> @offset(624)
-  mat4x2_f16:mat4x2<f16> @offset(648)
-  mat4x3_f16:mat4x3<f16> @offset(664)
-  mat4x4_f16:mat4x4<f16> @offset(696)
-  arr2_vec3_f32:array<vec3<f32>, 2> @offset(736)
-  arr2_mat4x2_f16:array<mat4x2<f16>, 2> @offset(768)
-  struct_inner:Inner @offset(800)
-  array_struct_inner:array<Inner, 4> @offset(816)
+int tint_f16_to_i32(half value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -65504.0h)), (value <= 65504.0h));
 }
-
-$B1: {  # root
-  %ub:ptr<uniform, S, read> = var @binding_point(0, 0)
-  %s:ptr<storage, i32, read_write> = var @binding_point(0, 1)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
-  $B2: {
-    %4:ptr<uniform, f32, read> = access %ub, 0u
-    %5:f32 = load %4
-    %scalar_f32:f32 = let %5
-    %7:ptr<uniform, i32, read> = access %ub, 1u
-    %8:i32 = load %7
-    %scalar_i32:i32 = let %8
-    %10:ptr<uniform, u32, read> = access %ub, 2u
-    %11:u32 = load %10
-    %scalar_u32:u32 = let %11
-    %13:ptr<uniform, f16, read> = access %ub, 3u
-    %14:f16 = load %13
-    %scalar_f16:f16 = let %14
-    %16:ptr<uniform, vec2<f32>, read> = access %ub, 4u
-    %17:vec2<f32> = load %16
-    %vec2_f32:vec2<f32> = let %17
-    %19:ptr<uniform, vec2<i32>, read> = access %ub, 5u
-    %20:vec2<i32> = load %19
-    %vec2_i32:vec2<i32> = let %20
-    %22:ptr<uniform, vec2<u32>, read> = access %ub, 6u
-    %23:vec2<u32> = load %22
-    %vec2_u32:vec2<u32> = let %23
-    %25:ptr<uniform, vec2<f16>, read> = access %ub, 7u
-    %26:vec2<f16> = load %25
-    %vec2_f16:vec2<f16> = let %26
-    %28:ptr<uniform, vec3<f32>, read> = access %ub, 8u
-    %29:vec3<f32> = load %28
-    %vec3_f32:vec3<f32> = let %29
-    %31:ptr<uniform, vec3<i32>, read> = access %ub, 9u
-    %32:vec3<i32> = load %31
-    %vec3_i32:vec3<i32> = let %32
-    %34:ptr<uniform, vec3<u32>, read> = access %ub, 10u
-    %35:vec3<u32> = load %34
-    %vec3_u32:vec3<u32> = let %35
-    %37:ptr<uniform, vec3<f16>, read> = access %ub, 11u
-    %38:vec3<f16> = load %37
-    %vec3_f16:vec3<f16> = let %38
-    %40:ptr<uniform, vec4<f32>, read> = access %ub, 12u
-    %41:vec4<f32> = load %40
-    %vec4_f32:vec4<f32> = let %41
-    %43:ptr<uniform, vec4<i32>, read> = access %ub, 13u
-    %44:vec4<i32> = load %43
-    %vec4_i32:vec4<i32> = let %44
-    %46:ptr<uniform, vec4<u32>, read> = access %ub, 14u
-    %47:vec4<u32> = load %46
-    %vec4_u32:vec4<u32> = let %47
-    %49:ptr<uniform, vec4<f16>, read> = access %ub, 15u
-    %50:vec4<f16> = load %49
-    %vec4_f16:vec4<f16> = let %50
-    %52:ptr<uniform, mat2x2<f32>, read> = access %ub, 16u
-    %53:mat2x2<f32> = load %52
-    %mat2x2_f32:mat2x2<f32> = let %53
-    %55:ptr<uniform, mat2x3<f32>, read> = access %ub, 17u
-    %56:mat2x3<f32> = load %55
-    %mat2x3_f32:mat2x3<f32> = let %56
-    %58:ptr<uniform, mat2x4<f32>, read> = access %ub, 18u
-    %59:mat2x4<f32> = load %58
-    %mat2x4_f32:mat2x4<f32> = let %59
-    %61:ptr<uniform, mat3x2<f32>, read> = access %ub, 19u
-    %62:mat3x2<f32> = load %61
-    %mat3x2_f32:mat3x2<f32> = let %62
-    %64:ptr<uniform, mat3x3<f32>, read> = access %ub, 20u
-    %65:mat3x3<f32> = load %64
-    %mat3x3_f32:mat3x3<f32> = let %65
-    %67:ptr<uniform, mat3x4<f32>, read> = access %ub, 21u
-    %68:mat3x4<f32> = load %67
-    %mat3x4_f32:mat3x4<f32> = let %68
-    %70:ptr<uniform, mat4x2<f32>, read> = access %ub, 22u
-    %71:mat4x2<f32> = load %70
-    %mat4x2_f32:mat4x2<f32> = let %71
-    %73:ptr<uniform, mat4x3<f32>, read> = access %ub, 23u
-    %74:mat4x3<f32> = load %73
-    %mat4x3_f32:mat4x3<f32> = let %74
-    %76:ptr<uniform, mat4x4<f32>, read> = access %ub, 24u
-    %77:mat4x4<f32> = load %76
-    %mat4x4_f32:mat4x4<f32> = let %77
-    %79:ptr<uniform, mat2x2<f16>, read> = access %ub, 25u
-    %80:mat2x2<f16> = load %79
-    %mat2x2_f16:mat2x2<f16> = let %80
-    %82:ptr<uniform, mat2x3<f16>, read> = access %ub, 26u
-    %83:mat2x3<f16> = load %82
-    %mat2x3_f16:mat2x3<f16> = let %83
-    %85:ptr<uniform, mat2x4<f16>, read> = access %ub, 27u
-    %86:mat2x4<f16> = load %85
-    %mat2x4_f16:mat2x4<f16> = let %86
-    %88:ptr<uniform, mat3x2<f16>, read> = access %ub, 28u
-    %89:mat3x2<f16> = load %88
-    %mat3x2_f16:mat3x2<f16> = let %89
-    %91:ptr<uniform, mat3x3<f16>, read> = access %ub, 29u
-    %92:mat3x3<f16> = load %91
-    %mat3x3_f16:mat3x3<f16> = let %92
-    %94:ptr<uniform, mat3x4<f16>, read> = access %ub, 30u
-    %95:mat3x4<f16> = load %94
-    %mat3x4_f16:mat3x4<f16> = let %95
-    %97:ptr<uniform, mat4x2<f16>, read> = access %ub, 31u
-    %98:mat4x2<f16> = load %97
-    %mat4x2_f16:mat4x2<f16> = let %98
-    %100:ptr<uniform, mat4x3<f16>, read> = access %ub, 32u
-    %101:mat4x3<f16> = load %100
-    %mat4x3_f16:mat4x3<f16> = let %101
-    %103:ptr<uniform, mat4x4<f16>, read> = access %ub, 33u
-    %104:mat4x4<f16> = load %103
-    %mat4x4_f16:mat4x4<f16> = let %104
-    %106:ptr<uniform, array<vec3<f32>, 2>, read> = access %ub, 34u
-    %107:array<vec3<f32>, 2> = load %106
-    %arr2_vec3_f32:array<vec3<f32>, 2> = let %107
-    %109:ptr<uniform, array<mat4x2<f16>, 2>, read> = access %ub, 35u
-    %110:array<mat4x2<f16>, 2> = load %109
-    %arr2_mat4x2_f16:array<mat4x2<f16>, 2> = let %110
-    %112:ptr<uniform, Inner, read> = access %ub, 36u
-    %113:Inner = load %112
-    %struct_inner:Inner = let %113
-    %115:ptr<uniform, array<Inner, 4>, read> = access %ub, 37u
-    %116:array<Inner, 4> = load %115
-    %array_struct_inner:array<Inner, 4> = let %116
-    %118:i32 = call %tint_f32_to_i32, %scalar_f32
-    %120:i32 = add %118, %scalar_i32
-    %121:i32 = let %120
-    %122:i32 = convert %scalar_u32
-    %123:i32 = add %121, %122
-    %124:i32 = let %123
-    %125:i32 = call %tint_f16_to_i32, %scalar_f16
-    %127:i32 = add %124, %125
-    %128:i32 = let %127
-    %129:f32 = access %vec2_f32, 0u
-    %130:i32 = call %tint_f32_to_i32, %129
-    %131:i32 = add %128, %130
-    %132:i32 = access %vec2_i32, 0u
-    %133:i32 = add %131, %132
-    %134:i32 = let %133
-    %135:u32 = access %vec2_u32, 0u
-    %136:i32 = convert %135
-    %137:i32 = add %134, %136
-    %138:i32 = let %137
-    %139:f16 = access %vec2_f16, 0u
-    %140:i32 = call %tint_f16_to_i32, %139
-    %141:i32 = add %138, %140
-    %142:i32 = let %141
-    %143:f32 = access %vec3_f32, 1u
-    %144:i32 = call %tint_f32_to_i32, %143
-    %145:i32 = add %142, %144
-    %146:i32 = access %vec3_i32, 1u
-    %147:i32 = add %145, %146
-    %148:i32 = let %147
-    %149:u32 = access %vec3_u32, 1u
-    %150:i32 = convert %149
-    %151:i32 = add %148, %150
-    %152:i32 = let %151
-    %153:f16 = access %vec3_f16, 1u
-    %154:i32 = call %tint_f16_to_i32, %153
-    %155:i32 = add %152, %154
-    %156:i32 = let %155
-    %157:f32 = access %vec4_f32, 2u
-    %158:i32 = call %tint_f32_to_i32, %157
-    %159:i32 = add %156, %158
-    %160:i32 = access %vec4_i32, 2u
-    %161:i32 = add %159, %160
-    %162:i32 = let %161
-    %163:u32 = access %vec4_u32, 2u
-    %164:i32 = convert %163
-    %165:i32 = add %162, %164
-    %166:i32 = let %165
-    %167:f16 = access %vec4_f16, 2u
-    %168:i32 = call %tint_f16_to_i32, %167
-    %169:i32 = add %166, %168
-    %170:i32 = let %169
-    %171:f32 = access %mat2x2_f32, 0i, 0u
-    %172:i32 = call %tint_f32_to_i32, %171
-    %173:i32 = add %170, %172
-    %174:i32 = let %173
-    %175:f32 = access %mat2x3_f32, 0i, 0u
-    %176:i32 = call %tint_f32_to_i32, %175
-    %177:i32 = add %174, %176
-    %178:i32 = let %177
-    %179:f32 = access %mat2x4_f32, 0i, 0u
-    %180:i32 = call %tint_f32_to_i32, %179
-    %181:i32 = add %178, %180
-    %182:i32 = let %181
-    %183:f32 = access %mat3x2_f32, 0i, 0u
-    %184:i32 = call %tint_f32_to_i32, %183
-    %185:i32 = add %182, %184
-    %186:i32 = let %185
-    %187:f32 = access %mat3x3_f32, 0i, 0u
-    %188:i32 = call %tint_f32_to_i32, %187
-    %189:i32 = add %186, %188
-    %190:i32 = let %189
-    %191:f32 = access %mat3x4_f32, 0i, 0u
-    %192:i32 = call %tint_f32_to_i32, %191
-    %193:i32 = add %190, %192
-    %194:i32 = let %193
-    %195:f32 = access %mat4x2_f32, 0i, 0u
-    %196:i32 = call %tint_f32_to_i32, %195
-    %197:i32 = add %194, %196
-    %198:i32 = let %197
-    %199:f32 = access %mat4x3_f32, 0i, 0u
-    %200:i32 = call %tint_f32_to_i32, %199
-    %201:i32 = add %198, %200
-    %202:i32 = let %201
-    %203:f32 = access %mat4x4_f32, 0i, 0u
-    %204:i32 = call %tint_f32_to_i32, %203
-    %205:i32 = add %202, %204
-    %206:i32 = let %205
-    %207:f16 = access %mat2x2_f16, 0i, 0u
-    %208:i32 = call %tint_f16_to_i32, %207
-    %209:i32 = add %206, %208
-    %210:i32 = let %209
-    %211:f16 = access %mat2x3_f16, 0i, 0u
-    %212:i32 = call %tint_f16_to_i32, %211
-    %213:i32 = add %210, %212
-    %214:i32 = let %213
-    %215:f16 = access %mat2x4_f16, 0i, 0u
-    %216:i32 = call %tint_f16_to_i32, %215
-    %217:i32 = add %214, %216
-    %218:i32 = let %217
-    %219:f16 = access %mat3x2_f16, 0i, 0u
-    %220:i32 = call %tint_f16_to_i32, %219
-    %221:i32 = add %218, %220
-    %222:i32 = let %221
-    %223:f16 = access %mat3x3_f16, 0i, 0u
-    %224:i32 = call %tint_f16_to_i32, %223
-    %225:i32 = add %222, %224
-    %226:i32 = let %225
-    %227:f16 = access %mat3x4_f16, 0i, 0u
-    %228:i32 = call %tint_f16_to_i32, %227
-    %229:i32 = add %226, %228
-    %230:i32 = let %229
-    %231:f16 = access %mat4x2_f16, 0i, 0u
-    %232:i32 = call %tint_f16_to_i32, %231
-    %233:i32 = add %230, %232
-    %234:i32 = let %233
-    %235:f16 = access %mat4x3_f16, 0i, 0u
-    %236:i32 = call %tint_f16_to_i32, %235
-    %237:i32 = add %234, %236
-    %238:i32 = let %237
-    %239:f16 = access %mat4x4_f16, 0i, 0u
-    %240:i32 = call %tint_f16_to_i32, %239
-    %241:i32 = add %238, %240
-    %242:i32 = let %241
-    %243:f32 = access %arr2_vec3_f32, 0i, 0u
-    %244:i32 = call %tint_f32_to_i32, %243
-    %245:i32 = add %242, %244
-    %246:i32 = let %245
-    %247:f16 = access %arr2_mat4x2_f16, 0i, 0i, 0u
-    %248:i32 = call %tint_f16_to_i32, %247
-    %249:i32 = add %246, %248
-    %250:i32 = access %struct_inner, 0u
-    %251:i32 = add %249, %250
-    %252:i32 = access %array_struct_inner, 0i, 0u
-    %253:i32 = add %251, %252
-    store %s, %253
-    ret
-  }
+kernel void tint_symbol(const constant S* ub [[buffer(0)]], device int* s [[buffer(1)]]) {
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.ub=ub, .s=s};
+  float const scalar_f32 = (*tint_module_vars.ub).scalar_f32;
+  int const scalar_i32 = (*tint_module_vars.ub).scalar_i32;
+  uint const scalar_u32 = (*tint_module_vars.ub).scalar_u32;
+  half const scalar_f16 = (*tint_module_vars.ub).scalar_f16;
+  float2 const vec2_f32 = (*tint_module_vars.ub).vec2_f32;
+  int2 const vec2_i32 = (*tint_module_vars.ub).vec2_i32;
+  uint2 const vec2_u32 = (*tint_module_vars.ub).vec2_u32;
+  half2 const vec2_f16 = (*tint_module_vars.ub).vec2_f16;
+  float3 const vec3_f32 = (*tint_module_vars.ub).vec3_f32;
+  int3 const vec3_i32 = (*tint_module_vars.ub).vec3_i32;
+  uint3 const vec3_u32 = (*tint_module_vars.ub).vec3_u32;
+  half3 const vec3_f16 = (*tint_module_vars.ub).vec3_f16;
+  float4 const vec4_f32 = (*tint_module_vars.ub).vec4_f32;
+  int4 const vec4_i32 = (*tint_module_vars.ub).vec4_i32;
+  uint4 const vec4_u32 = (*tint_module_vars.ub).vec4_u32;
+  half4 const vec4_f16 = (*tint_module_vars.ub).vec4_f16;
+  float2x2 const mat2x2_f32 = (*tint_module_vars.ub).mat2x2_f32;
+  float2x3 const mat2x3_f32 = (*tint_module_vars.ub).mat2x3_f32;
+  float2x4 const mat2x4_f32 = (*tint_module_vars.ub).mat2x4_f32;
+  float3x2 const mat3x2_f32 = (*tint_module_vars.ub).mat3x2_f32;
+  float3x3 const mat3x3_f32 = (*tint_module_vars.ub).mat3x3_f32;
+  float3x4 const mat3x4_f32 = (*tint_module_vars.ub).mat3x4_f32;
+  float4x2 const mat4x2_f32 = (*tint_module_vars.ub).mat4x2_f32;
+  float4x3 const mat4x3_f32 = (*tint_module_vars.ub).mat4x3_f32;
+  float4x4 const mat4x4_f32 = (*tint_module_vars.ub).mat4x4_f32;
+  half2x2 const mat2x2_f16 = (*tint_module_vars.ub).mat2x2_f16;
+  half2x3 const mat2x3_f16 = (*tint_module_vars.ub).mat2x3_f16;
+  half2x4 const mat2x4_f16 = (*tint_module_vars.ub).mat2x4_f16;
+  half3x2 const mat3x2_f16 = (*tint_module_vars.ub).mat3x2_f16;
+  half3x3 const mat3x3_f16 = (*tint_module_vars.ub).mat3x3_f16;
+  half3x4 const mat3x4_f16 = (*tint_module_vars.ub).mat3x4_f16;
+  half4x2 const mat4x2_f16 = (*tint_module_vars.ub).mat4x2_f16;
+  half4x3 const mat4x3_f16 = (*tint_module_vars.ub).mat4x3_f16;
+  half4x4 const mat4x4_f16 = (*tint_module_vars.ub).mat4x4_f16;
+  tint_array<float3, 2> const arr2_vec3_f32 = (*tint_module_vars.ub).arr2_vec3_f32;
+  tint_array<half4x2, 2> const arr2_mat4x2_f16 = (*tint_module_vars.ub).arr2_mat4x2_f16;
+  Inner const struct_inner = (*tint_module_vars.ub).struct_inner;
+  tint_array<Inner, 4> const array_struct_inner = (*tint_module_vars.ub).array_struct_inner;
+  int const v = (tint_f32_to_i32(scalar_f32) + scalar_i32);
+  int const v_1 = (v + int(scalar_u32));
+  int const v_2 = (v_1 + tint_f16_to_i32(scalar_f16));
+  int const v_3 = ((v_2 + tint_f32_to_i32(vec2_f32[0u])) + vec2_i32[0u]);
+  int const v_4 = (v_3 + int(vec2_u32[0u]));
+  int const v_5 = (v_4 + tint_f16_to_i32(vec2_f16[0u]));
+  int const v_6 = ((v_5 + tint_f32_to_i32(vec3_f32[1u])) + vec3_i32[1u]);
+  int const v_7 = (v_6 + int(vec3_u32[1u]));
+  int const v_8 = (v_7 + tint_f16_to_i32(vec3_f16[1u]));
+  int const v_9 = ((v_8 + tint_f32_to_i32(vec4_f32[2u])) + vec4_i32[2u]);
+  int const v_10 = (v_9 + int(vec4_u32[2u]));
+  int const v_11 = (v_10 + tint_f16_to_i32(vec4_f16[2u]));
+  int const v_12 = (v_11 + tint_f32_to_i32(mat2x2_f32[0][0u]));
+  int const v_13 = (v_12 + tint_f32_to_i32(mat2x3_f32[0][0u]));
+  int const v_14 = (v_13 + tint_f32_to_i32(mat2x4_f32[0][0u]));
+  int const v_15 = (v_14 + tint_f32_to_i32(mat3x2_f32[0][0u]));
+  int const v_16 = (v_15 + tint_f32_to_i32(mat3x3_f32[0][0u]));
+  int const v_17 = (v_16 + tint_f32_to_i32(mat3x4_f32[0][0u]));
+  int const v_18 = (v_17 + tint_f32_to_i32(mat4x2_f32[0][0u]));
+  int const v_19 = (v_18 + tint_f32_to_i32(mat4x3_f32[0][0u]));
+  int const v_20 = (v_19 + tint_f32_to_i32(mat4x4_f32[0][0u]));
+  int const v_21 = (v_20 + tint_f16_to_i32(mat2x2_f16[0][0u]));
+  int const v_22 = (v_21 + tint_f16_to_i32(mat2x3_f16[0][0u]));
+  int const v_23 = (v_22 + tint_f16_to_i32(mat2x4_f16[0][0u]));
+  int const v_24 = (v_23 + tint_f16_to_i32(mat3x2_f16[0][0u]));
+  int const v_25 = (v_24 + tint_f16_to_i32(mat3x3_f16[0][0u]));
+  int const v_26 = (v_25 + tint_f16_to_i32(mat3x4_f16[0][0u]));
+  int const v_27 = (v_26 + tint_f16_to_i32(mat4x2_f16[0][0u]));
+  int const v_28 = (v_27 + tint_f16_to_i32(mat4x3_f16[0][0u]));
+  int const v_29 = (v_28 + tint_f16_to_i32(mat4x4_f16[0][0u]));
+  int const v_30 = (v_29 + tint_f32_to_i32(arr2_vec3_f32[0][0u]));
+  (*tint_module_vars.s) = (((v_30 + tint_f16_to_i32(arr2_mat4x2_f16[0][0][0u])) + struct_inner.scalar_i32) + array_struct_inner[0].scalar_i32);
 }
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B3: {
-    %255:i32 = convert %value
-    %256:bool = gte %value, -2147483648.0f
-    %257:i32 = select -2147483648i, %255, %256
-    %258:bool = lte %value, 2147483520.0f
-    %259:i32 = select 2147483647i, %257, %258
-    ret %259
-  }
-}
-%tint_f16_to_i32 = func(%value_1:f16):i32 {  # %value_1: 'value'
-  $B4: {
-    %261:i32 = convert %value_1
-    %262:bool = gte %value_1, -65504.0h
-    %263:i32 = select -2147483648i, %261, %262
-    %264:bool = lte %value_1, 65504.0h
-    %265:i32 = select 2147483647i, %263, %264
-    ret %265
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/bug/tint/1520.spvasm.expected.ir.msl b/test/tint/bug/tint/1520.spvasm.expected.ir.msl
index c1cce03..6caf65e 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.ir.msl
+++ b/test/tint/bug/tint/1520.spvasm.expected.ir.msl
@@ -1,278 +1,163 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct UniformBuffer {
+  float unknownInput_S1_c0;
+  float4 ucolorRed_S1_c0;
+  float4 ucolorGreen_S1_c0;
+  float3x3 umatrix_S1;
+};
+struct tint_module_vars_struct {
+  const constant UniformBuffer* x_4;
+  thread float4* sk_FragColor;
+  thread bool* sk_Clockwise;
+  thread float4* vcolor_S0;
+};
+struct main_out {
+  float4 sk_FragColor_1;
+};
+struct tint_symbol_outputs {
+  float4 main_out_sk_FragColor_1 [[color(0)]];
+};
+struct tint_symbol_inputs {
+  float4 vcolor_S0_param [[user(locn0)]];
+};
 
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: UniformBuffer = struct @align(16) {
-  unknownInput_S1_c0:f32 @offset(16)
-  ucolorRed_S1_c0:vec4<f32> @offset(32)
-  ucolorGreen_S1_c0:vec4<f32> @offset(48)
-  umatrix_S1:mat3x3<f32> @offset(64)
+int4 tint_div_v4i32(int4 lhs, int4 rhs) {
+  return (lhs / select(rhs, int4(1), ((rhs == int4(0)) | ((lhs == int4((-2147483647 - 1))) & (rhs == int4(-1))))));
 }
-
-main_out = struct @align(16) {
-  sk_FragColor_1:vec4<f32> @offset(0), @location(0)
+int tint_f32_to_i32(float value) {
+  return select(2147483647, select((-2147483647 - 1), int(value), (value >= -2147483648.0f)), (value <= 2147483520.0f));
 }
-
-$B1: {  # root
-  %x_4:ptr<uniform, UniformBuffer, read> = var @binding_point(0, 0)
-  %sk_FragColor:ptr<private, vec4<f32>, read_write> = var
-  %sk_Clockwise:ptr<private, bool, read_write> = var
-  %vcolor_S0:ptr<private, vec4<f32>, read_write> = var
-}
-
-%test_int_S1_c0_b = func():bool {
-  $B2: {
-    %unknown:ptr<function, i32, read_write> = var
-    %ok:ptr<function, bool, read_write> = var
-    %val:ptr<function, vec4<i32>, read_write> = var
-    %x_40:ptr<function, bool, read_write> = var
-    %x_41:ptr<function, bool, read_write> = var
-    %x_54:ptr<function, bool, read_write> = var
-    %x_55:ptr<function, bool, read_write> = var
-    %x_65:ptr<function, bool, read_write> = var
-    %x_66:ptr<function, bool, read_write> = var
-    %15:ptr<uniform, f32, read> = access %x_4, 0u
-    %16:f32 = load %15
-    %17:i32 = call %tint_f32_to_i32, %16
-    %x_27:i32 = let %17
-    store %unknown, %x_27
-    store %ok, true
-    store %x_41, false
-    if true [t: $B3] {  # if_1
-      $B3: {  # true
-        %20:vec4<i32> = construct %x_27
-        %21:vec4<i32> = call %tint_div_v4i32, vec4<i32>(0i), %20
-        %23:vec4<bool> = eq %21, vec4<i32>(0i)
-        %24:bool = all %23
-        store %x_40, %24
-        %25:bool = load %x_40
-        store %x_41, %25
-        exit_if  # if_1
-      }
-    }
-    %26:bool = load %x_41
-    store %ok, %26
-    %27:vec4<i32> = construct %x_27
-    %x_44:vec4<i32> = let %27
-    store %val, %x_44
-    %29:vec4<i32> = add %x_44, vec4<i32>(1i)
-    %x_47:vec4<i32> = let %29
-    store %val, %x_47
-    %31:vec4<i32> = sub %x_47, vec4<i32>(1i)
-    %x_48:vec4<i32> = let %31
-    store %val, %x_48
-    %33:vec4<i32> = add %x_48, vec4<i32>(1i)
-    %x_49:vec4<i32> = let %33
-    store %val, %x_49
-    %35:vec4<i32> = sub %x_49, vec4<i32>(1i)
-    %x_50:vec4<i32> = let %35
-    store %val, %x_50
-    store %x_55, false
-    %37:bool = load %x_41
-    if %37 [t: $B4] {  # if_2
-      $B4: {  # true
-        %38:vec4<bool> = eq %x_50, %x_44
-        %39:bool = all %38
-        store %x_54, %39
-        %40:bool = load %x_54
-        store %x_55, %40
-        exit_if  # if_2
-      }
-    }
-    %41:bool = load %x_55
-    store %ok, %41
-    %42:vec4<i32> = mul %x_50, vec4<i32>(2i)
-    %x_58:vec4<i32> = let %42
-    store %val, %x_58
-    %44:vec4<i32> = call %tint_div_v4i32, %x_58, vec4<i32>(2i)
-    %x_59:vec4<i32> = let %44
-    store %val, %x_59
-    %46:vec4<i32> = mul %x_59, vec4<i32>(2i)
-    %x_60:vec4<i32> = let %46
-    store %val, %x_60
-    %48:vec4<i32> = call %tint_div_v4i32, %x_60, vec4<i32>(2i)
-    %x_61:vec4<i32> = let %48
-    store %val, %x_61
-    store %x_66, false
-    %50:bool = load %x_55
-    if %50 [t: $B5] {  # if_3
-      $B5: {  # true
-        %51:vec4<bool> = eq %x_61, %x_44
-        %52:bool = all %51
-        store %x_65, %52
-        %53:bool = load %x_65
-        store %x_66, %53
-        exit_if  # if_3
-      }
-    }
-    %54:bool = load %x_66
-    store %ok, %54
-    %55:bool = load %x_66
-    ret %55
+bool test_int_S1_c0_b(tint_module_vars_struct tint_module_vars) {
+  int unknown = 0;
+  bool ok = false;
+  int4 val = 0;
+  bool x_40 = false;
+  bool x_41 = false;
+  bool x_54 = false;
+  bool x_55 = false;
+  bool x_65 = false;
+  bool x_66 = false;
+  int const x_27 = tint_f32_to_i32((*tint_module_vars.x_4).unknownInput_S1_c0);
+  unknown = x_27;
+  ok = true;
+  x_41 = false;
+  if (true) {
+    x_40 = all((tint_div_v4i32(int4(0), int4(x_27)) == int4(0)));
+    x_41 = x_40;
   }
-}
-%main_1 = func():void {
-  $B6: {
-    %outputColor_S0:ptr<function, vec4<f32>, read_write> = var
-    %output_S1:ptr<function, vec4<f32>, read_write> = var
-    %x_8_unknown:ptr<function, f32, read_write> = var
-    %x_9_ok:ptr<function, bool, read_write> = var
-    %x_10_val:ptr<function, vec4<f32>, read_write> = var
-    %x_116:ptr<function, vec4<f32>, read_write> = var
-    %x_86:ptr<function, bool, read_write> = var
-    %x_87:ptr<function, bool, read_write> = var
-    %x_99:ptr<function, bool, read_write> = var
-    %x_100:ptr<function, bool, read_write> = var
-    %x_110:ptr<function, bool, read_write> = var
-    %x_111:ptr<function, bool, read_write> = var
-    %x_114:ptr<function, bool, read_write> = var
-    %x_115:ptr<function, bool, read_write> = var
-    %71:vec4<f32> = load %vcolor_S0
-    store %outputColor_S0, %71
-    %72:ptr<uniform, f32, read> = access %x_4, 0u
-    %73:f32 = load %72
-    %x_77:f32 = let %73
-    store %x_8_unknown, %x_77
-    store %x_9_ok, true
-    store %x_87, false
-    if true [t: $B7] {  # if_4
-      $B7: {  # true
-        %75:vec4<f32> = construct %x_77
-        %76:vec4<f32> = div vec4<f32>(0.0f), %75
-        %77:vec4<bool> = eq %76, vec4<f32>(0.0f)
-        %78:bool = all %77
-        store %x_86, %78
-        %79:bool = load %x_86
-        store %x_87, %79
-        exit_if  # if_4
-      }
-    }
-    %80:bool = load %x_87
-    store %x_9_ok, %80
-    %81:vec4<f32> = construct %x_77
-    %x_89:vec4<f32> = let %81
-    store %x_10_val, %x_89
-    %83:vec4<f32> = add %x_89, vec4<f32>(1.0f)
-    %x_92:vec4<f32> = let %83
-    store %x_10_val, %x_92
-    %85:vec4<f32> = sub %x_92, vec4<f32>(1.0f)
-    %x_93:vec4<f32> = let %85
-    store %x_10_val, %x_93
-    %87:vec4<f32> = add %x_93, vec4<f32>(1.0f)
-    %x_94:vec4<f32> = let %87
-    store %x_10_val, %x_94
-    %89:vec4<f32> = sub %x_94, vec4<f32>(1.0f)
-    %x_95:vec4<f32> = let %89
-    store %x_10_val, %x_95
-    store %x_100, false
-    %91:bool = load %x_87
-    if %91 [t: $B8] {  # if_5
-      $B8: {  # true
-        %92:vec4<bool> = eq %x_95, %x_89
-        %93:bool = all %92
-        store %x_99, %93
-        %94:bool = load %x_99
-        store %x_100, %94
-        exit_if  # if_5
-      }
-    }
-    %95:bool = load %x_100
-    store %x_9_ok, %95
-    %96:vec4<f32> = mul %x_95, vec4<f32>(2.0f)
-    %x_103:vec4<f32> = let %96
-    store %x_10_val, %x_103
-    %98:vec4<f32> = div %x_103, vec4<f32>(2.0f)
-    %x_104:vec4<f32> = let %98
-    store %x_10_val, %x_104
-    %100:vec4<f32> = mul %x_104, vec4<f32>(2.0f)
-    %x_105:vec4<f32> = let %100
-    store %x_10_val, %x_105
-    %102:vec4<f32> = div %x_105, vec4<f32>(2.0f)
-    %x_106:vec4<f32> = let %102
-    store %x_10_val, %x_106
-    store %x_111, false
-    %104:bool = load %x_100
-    if %104 [t: $B9] {  # if_6
-      $B9: {  # true
-        %105:vec4<bool> = eq %x_106, %x_89
-        %106:bool = all %105
-        store %x_110, %106
-        %107:bool = load %x_110
-        store %x_111, %107
-        exit_if  # if_6
-      }
-    }
-    %108:bool = load %x_111
-    store %x_9_ok, %108
-    store %x_115, false
-    %109:bool = load %x_111
-    if %109 [t: $B10] {  # if_7
-      $B10: {  # true
-        %110:bool = call %test_int_S1_c0_b
-        store %x_114, %110
-        %111:bool = load %x_114
-        store %x_115, %111
-        exit_if  # if_7
-      }
-    }
-    %112:bool = load %x_115
-    if %112 [t: $B11, f: $B12] {  # if_8
-      $B11: {  # true
-        %113:ptr<uniform, vec4<f32>, read> = access %x_4, 2u
-        %114:vec4<f32> = load %113
-        store %x_116, %114
-        exit_if  # if_8
-      }
-      $B12: {  # false
-        %115:ptr<uniform, vec4<f32>, read> = access %x_4, 1u
-        %116:vec4<f32> = load %115
-        store %x_116, %116
-        exit_if  # if_8
-      }
-    }
-    %117:vec4<f32> = load %x_116
-    %x_125:vec4<f32> = let %117
-    %119:vec4<f32> = load %x_116
-    store %output_S1, %119
-    store %sk_FragColor, %x_125
-    ret
+  ok = x_41;
+  int4 const x_44 = int4(x_27);
+  val = x_44;
+  int4 const x_47 = (x_44 + int4(1));
+  val = x_47;
+  int4 const x_48 = (x_47 - int4(1));
+  val = x_48;
+  int4 const x_49 = (x_48 + int4(1));
+  val = x_49;
+  int4 const x_50 = (x_49 - int4(1));
+  val = x_50;
+  x_55 = false;
+  if (x_41) {
+    x_54 = all((x_50 == x_44));
+    x_55 = x_54;
   }
-}
-%tint_symbol = @fragment func(%sk_Clockwise_param:bool [@front_facing], %vcolor_S0_param:vec4<f32> [@location(0)]):main_out {
-  $B13: {
-    store %sk_Clockwise, %sk_Clockwise_param
-    store %vcolor_S0, %vcolor_S0_param
-    %123:void = call %main_1
-    %124:vec4<f32> = load %sk_FragColor
-    %125:main_out = construct %124
-    ret %125
+  ok = x_55;
+  int4 const x_58 = (x_50 * int4(2));
+  val = x_58;
+  int4 const x_59 = tint_div_v4i32(x_58, int4(2));
+  val = x_59;
+  int4 const x_60 = (x_59 * int4(2));
+  val = x_60;
+  int4 const x_61 = tint_div_v4i32(x_60, int4(2));
+  val = x_61;
+  x_66 = false;
+  if (x_55) {
+    x_65 = all((x_61 == x_44));
+    x_66 = x_65;
   }
+  ok = x_66;
+  return x_66;
 }
-%tint_div_v4i32 = func(%lhs:vec4<i32>, %rhs:vec4<i32>):vec4<i32> {
-  $B14: {
-    %128:vec4<bool> = eq %rhs, vec4<i32>(0i)
-    %129:vec4<bool> = eq %lhs, vec4<i32>(-2147483648i)
-    %130:vec4<bool> = eq %rhs, vec4<i32>(-1i)
-    %131:vec4<bool> = and %129, %130
-    %132:vec4<bool> = or %128, %131
-    %133:vec4<i32> = select %rhs, vec4<i32>(1i), %132
-    %134:vec4<i32> = div %lhs, %133
-    ret %134
+void main_1(tint_module_vars_struct tint_module_vars) {
+  float4 outputColor_S0 = 0.0f;
+  float4 output_S1 = 0.0f;
+  float x_8_unknown = 0.0f;
+  bool x_9_ok = false;
+  float4 x_10_val = 0.0f;
+  float4 x_116 = 0.0f;
+  bool x_86 = false;
+  bool x_87 = false;
+  bool x_99 = false;
+  bool x_100 = false;
+  bool x_110 = false;
+  bool x_111 = false;
+  bool x_114 = false;
+  bool x_115 = false;
+  outputColor_S0 = (*tint_module_vars.vcolor_S0);
+  float const x_77 = (*tint_module_vars.x_4).unknownInput_S1_c0;
+  x_8_unknown = x_77;
+  x_9_ok = true;
+  x_87 = false;
+  if (true) {
+    x_86 = all(((float4(0.0f) / float4(x_77)) == float4(0.0f)));
+    x_87 = x_86;
   }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %136:i32 = convert %value
-    %137:bool = gte %value, -2147483648.0f
-    %138:i32 = select -2147483648i, %136, %137
-    %139:bool = lte %value, 2147483520.0f
-    %140:i32 = select 2147483647i, %138, %139
-    ret %140
+  x_9_ok = x_87;
+  float4 const x_89 = float4(x_77);
+  x_10_val = x_89;
+  float4 const x_92 = (x_89 + float4(1.0f));
+  x_10_val = x_92;
+  float4 const x_93 = (x_92 - float4(1.0f));
+  x_10_val = x_93;
+  float4 const x_94 = (x_93 + float4(1.0f));
+  x_10_val = x_94;
+  float4 const x_95 = (x_94 - float4(1.0f));
+  x_10_val = x_95;
+  x_100 = false;
+  if (x_87) {
+    x_99 = all((x_95 == x_89));
+    x_100 = x_99;
   }
+  x_9_ok = x_100;
+  float4 const x_103 = (x_95 * float4(2.0f));
+  x_10_val = x_103;
+  float4 const x_104 = (x_103 / float4(2.0f));
+  x_10_val = x_104;
+  float4 const x_105 = (x_104 * float4(2.0f));
+  x_10_val = x_105;
+  float4 const x_106 = (x_105 / float4(2.0f));
+  x_10_val = x_106;
+  x_111 = false;
+  if (x_100) {
+    x_110 = all((x_106 == x_89));
+    x_111 = x_110;
+  }
+  x_9_ok = x_111;
+  x_115 = false;
+  if (x_111) {
+    x_114 = test_int_S1_c0_b(tint_module_vars);
+    x_115 = x_114;
+  }
+  if (x_115) {
+    x_116 = (*tint_module_vars.x_4).ucolorGreen_S1_c0;
+  } else {
+    x_116 = (*tint_module_vars.x_4).ucolorRed_S1_c0;
+  }
+  float4 const x_125 = x_116;
+  output_S1 = x_116;
+  (*tint_module_vars.sk_FragColor) = x_125;
 }
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
+main_out tint_symbol_inner(bool sk_Clockwise_param, float4 vcolor_S0_param, tint_module_vars_struct tint_module_vars) {
+  (*tint_module_vars.sk_Clockwise) = sk_Clockwise_param;
+  (*tint_module_vars.vcolor_S0) = vcolor_S0_param;
+  main_1(tint_module_vars);
+  return main_out{.sk_FragColor_1=(*tint_module_vars.sk_FragColor)};
+}
+fragment tint_symbol_outputs tint_symbol(bool sk_Clockwise_param [[front_facing]], tint_symbol_inputs inputs [[stage_in]], const constant UniformBuffer* x_4 [[buffer(0)]]) {
+  thread float4 sk_FragColor = 0.0f;
+  thread bool sk_Clockwise = false;
+  thread float4 vcolor_S0 = 0.0f;
+  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.x_4=x_4, .sk_FragColor=(&sk_FragColor), .sk_Clockwise=(&sk_Clockwise), .vcolor_S0=(&vcolor_S0)};
+  return tint_symbol_outputs{.main_out_sk_FragColor_1=tint_symbol_inner(sk_Clockwise_param, inputs.vcolor_S0_param, tint_module_vars).sk_FragColor_1};
+}
diff --git a/test/tint/bug/tint/1961.wgsl.expected.ir.msl b/test/tint/bug/tint/1961.wgsl.expected.ir.msl
index 12a45e3..d41f028 100644
--- a/test/tint/bug/tint/1961.wgsl.expected.ir.msl
+++ b/test/tint/bug/tint/1961.wgsl.expected.ir.msl
@@ -6,13 +6,7 @@
   bool y = false;
   bool v = false;
   if (x) {
-    bool v_1 = false;
-    if (true) {
-      v_1 = true;
-    } else {
-      v_1 = y;
-    }
-    v = v_1;
+    v = true;
   } else {
     v = false;
   }
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index e3753ab..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,197 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%func_ = func():f32 {
-  $B2: {
-    %x:ptr<function, i32, read_write> = var
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:bool = lt %6, 1.0f
-    if %7 [t: $B3] {  # if_1
-      $B3: {  # true
-        ret 5.0f
-      }
-    }
-    %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %9:f32 = load_vector_element %8, 0u
-    %10:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %11:f32 = load_vector_element %10, 1u
-    %12:bool = gt %9, %11
-    if %12 [t: $B4] {  # if_2
-      $B4: {  # true
-        ret 1.0f
-      }
-    }
-    %13:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %14:f32 = load_vector_element %13, 0u
-    %15:i32 = call %tint_f32_to_i32, %14
-    store %x, %15
-    %17:i32 = load %x
-    %18:i32 = let %17
-    %19:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %20:f32 = load_vector_element %19, 0u
-    %21:f32 = clamp %20, 0.0f, 1.0f
-    %22:i32 = call %tint_f32_to_i32, %21
-    %23:i32 = mul %22, 3i
-    %24:i32 = add %18, %23
-    store %x, %24
-    %25:i32 = load %x
-    %x_120:i32 = let %25
-    %27:f32 = convert %x_120
-    %28:f32 = add 5.0f, %27
-    ret %28
-  }
-}
-%main_1 = func():void {
-  $B5: {
-    %i:ptr<function, i32, read_write> = var
-    %j:ptr<function, i32, read_write> = var
-    %data:ptr<function, array<vec2<f32>, 17>, read_write> = var
-    store %i, 0i
-    loop [b: $B6, c: $B7] {  # loop_1
-      $B6: {  # body
-        %33:i32 = load %i
-        %34:i32 = let %33
-        %35:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %36:f32 = load_vector_element %35, 0u
-        %37:i32 = call %tint_f32_to_i32, %36
-        %38:i32 = add 4i, %37
-        %39:bool = lt %34, %38
-        if %39 [t: $B8, f: $B9] {  # if_3
-          $B8: {  # true
-            exit_if  # if_3
-          }
-          $B9: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %40:f32 = load_vector_element %gl_FragCoord, 0u
-        %41:bool = gte %40, 0.0f
-        if %41 [t: $B10] {  # if_4
-          $B10: {  # true
-            store %j, 0i
-            loop [b: $B11, c: $B12] {  # loop_2
-              $B11: {  # body
-                %x_81:ptr<function, bool, read_write> = var
-                %x_82:ptr<function, bool, read_write> = var
-                %44:i32 = load %j
-                %45:bool = lt %44, 4i
-                if %45 [t: $B13, f: $B14] {  # if_5
-                  $B13: {  # true
-                    exit_if  # if_5
-                  }
-                  $B14: {  # false
-                    exit_loop  # loop_2
-                  }
-                }
-                %46:i32 = load %j
-                %x_67:i32 = let %46
-                %48:i32 = load %i
-                %x_69:i32 = let %48
-                %50:f32 = call %func_
-                %x_71:f32 = let %50
-                %52:i32 = mul 4i, %x_67
-                %53:i32 = add %52, %x_69
-                %54:ptr<function, vec2<f32>, read_write> = access %data, %53
-                store_vector_element %54, 0u, %x_71
-                %55:ptr<function, vec2<f32>, read_write> = access %data, 0i
-                %56:f32 = load_vector_element %55, 0u
-                %57:bool = eq %56, 5.0f
-                %x_75:bool = let %57
-                store %x_82, %x_75
-                %59:bool = eq %x_75, false
-                if %59 [t: $B15] {  # if_6
-                  $B15: {  # true
-                    %60:ptr<function, vec2<f32>, read_write> = access %data, 15i
-                    %61:f32 = load_vector_element %60, 0u
-                    %62:bool = eq %61, 5.0f
-                    store %x_81, %62
-                    %63:bool = load %x_81
-                    store %x_82, %63
-                    exit_if  # if_6
-                  }
-                }
-                %64:bool = load %x_82
-                if %64 [t: $B16, f: $B17] {  # if_7
-                  $B16: {  # true
-                    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-                    exit_if  # if_7
-                  }
-                  $B17: {  # false
-                    store %x_GLF_color, vec4<f32>(0.0f)
-                    exit_if  # if_7
-                  }
-                }
-                %65:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %66:f32 = load_vector_element %65, 0u
-                %67:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %68:f32 = load_vector_element %67, 1u
-                %69:bool = gt %66, %68
-                if %69 [t: $B18] {  # if_8
-                  $B18: {  # true
-                    ret
-                  }
-                }
-                continue  # -> $B12
-              }
-              $B12: {  # continuing
-                %70:i32 = load %j
-                %71:i32 = add %70, 1i
-                store %j, %71
-                next_iteration  # -> $B11
-              }
-            }
-            exit_if  # if_4
-          }
-        }
-        continue  # -> $B7
-      }
-      $B7: {  # continuing
-        %72:i32 = load %i
-        %73:i32 = add %72, 1i
-        store %i, %73
-        next_iteration  # -> $B6
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B19: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %76:void = call %main_1
-    %77:vec4<f32> = load %x_GLF_color
-    %78:main_out = construct %77
-    ret %78
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B20: {
-    %80:i32 = convert %value
-    %81:bool = gte %value, -2147483648.0f
-    %82:i32 = select -2147483648i, %80, %81
-    %83:bool = lte %value, 2147483520.0f
-    %84:i32 = select 2147483647i, %82, %83
-    ret %84
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 82260ba..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/array-idx-multiplied-by-for-loop-idx/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,212 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%func_ = func():f32 {
-  $B2: {
-    %x:ptr<function, i32, read_write> = var
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_99:f32 = let %6
-    %8:bool = lt %x_99, 1.0f
-    if %8 [t: $B3] {  # if_1
-      $B3: {  # true
-        ret 5.0f
-      }
-    }
-    %9:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %10:f32 = load_vector_element %9, 0u
-    %x_104:f32 = let %10
-    %12:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %13:f32 = load_vector_element %12, 1u
-    %x_106:f32 = let %13
-    %15:bool = gt %x_104, %x_106
-    if %15 [t: $B4] {  # if_2
-      $B4: {  # true
-        ret 1.0f
-      }
-    }
-    %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %17:f32 = load_vector_element %16, 0u
-    %x_111:f32 = let %17
-    %19:i32 = call %tint_f32_to_i32, %x_111
-    store %x, %19
-    %21:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-    %22:f32 = load_vector_element %21, 0u
-    %x_114:f32 = let %22
-    %24:i32 = load %x
-    %x_118:i32 = let %24
-    %26:f32 = clamp %x_114, 0.0f, 1.0f
-    %27:i32 = call %tint_f32_to_i32, %26
-    %28:i32 = mul %27, 3i
-    %29:i32 = add %x_118, %28
-    store %x, %29
-    %30:i32 = load %x
-    %x_120:i32 = let %30
-    %32:f32 = convert %x_120
-    %33:f32 = add 5.0f, %32
-    ret %33
-  }
-}
-%main_1 = func():void {
-  $B5: {
-    %i:ptr<function, i32, read_write> = var
-    %j:ptr<function, i32, read_write> = var
-    %data:ptr<function, array<vec2<f32>, 17>, read_write> = var
-    store %i, 0i
-    loop [b: $B6, c: $B7] {  # loop_1
-      $B6: {  # body
-        %38:i32 = load %i
-        %x_48:i32 = let %38
-        %40:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %41:f32 = load_vector_element %40, 0u
-        %x_50:f32 = let %41
-        %43:i32 = call %tint_f32_to_i32, %x_50
-        %44:i32 = add 4i, %43
-        %45:bool = lt %x_48, %44
-        if %45 [t: $B8, f: $B9] {  # if_3
-          $B8: {  # true
-            exit_if  # if_3
-          }
-          $B9: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %46:f32 = load_vector_element %gl_FragCoord, 0u
-        %x_56:f32 = let %46
-        %48:bool = gte %x_56, 0.0f
-        if %48 [t: $B10] {  # if_4
-          $B10: {  # true
-            store %j, 0i
-            loop [b: $B11, c: $B12] {  # loop_2
-              $B11: {  # body
-                %x_81:ptr<function, bool, read_write> = var
-                %x_82_phi:ptr<function, bool, read_write> = var
-                %51:i32 = load %j
-                %x_64:i32 = let %51
-                %53:bool = lt %x_64, 4i
-                if %53 [t: $B13, f: $B14] {  # if_5
-                  $B13: {  # true
-                    exit_if  # if_5
-                  }
-                  $B14: {  # false
-                    exit_loop  # loop_2
-                  }
-                }
-                %54:i32 = load %j
-                %x_67:i32 = let %54
-                %56:i32 = load %i
-                %x_69:i32 = let %56
-                %58:f32 = call %func_
-                %x_71:f32 = let %58
-                %60:i32 = mul 4i, %x_67
-                %61:i32 = add %60, %x_69
-                %62:ptr<function, vec2<f32>, read_write> = access %data, %61
-                store_vector_element %62, 0u, %x_71
-                %63:ptr<function, vec2<f32>, read_write> = access %data, 0i
-                %64:f32 = load_vector_element %63, 0u
-                %x_74:f32 = let %64
-                %66:bool = eq %x_74, 5.0f
-                %x_75:bool = let %66
-                store %x_82_phi, %x_75
-                %68:bool = eq %x_75, false
-                if %68 [t: $B15] {  # if_6
-                  $B15: {  # true
-                    %69:ptr<function, vec2<f32>, read_write> = access %data, 15i
-                    %70:f32 = load_vector_element %69, 0u
-                    %x_80:f32 = let %70
-                    %72:bool = eq %x_80, 5.0f
-                    store %x_81, %72
-                    %73:bool = load %x_81
-                    store %x_82_phi, %73
-                    exit_if  # if_6
-                  }
-                }
-                %74:bool = load %x_82_phi
-                %x_82:bool = let %74
-                if %x_82 [t: $B16, f: $B17] {  # if_7
-                  $B16: {  # true
-                    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-                    exit_if  # if_7
-                  }
-                  $B17: {  # false
-                    store %x_GLF_color, vec4<f32>(0.0f)
-                    exit_if  # if_7
-                  }
-                }
-                %76:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %77:f32 = load_vector_element %76, 0u
-                %x_87:f32 = let %77
-                %79:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-                %80:f32 = load_vector_element %79, 1u
-                %x_89:f32 = let %80
-                %82:bool = gt %x_87, %x_89
-                if %82 [t: $B18] {  # if_8
-                  $B18: {  # true
-                    ret
-                  }
-                }
-                continue  # -> $B12
-              }
-              $B12: {  # continuing
-                %83:i32 = load %j
-                %x_93:i32 = let %83
-                %85:i32 = add %x_93, 1i
-                store %j, %85
-                next_iteration  # -> $B11
-              }
-            }
-            exit_if  # if_4
-          }
-        }
-        continue  # -> $B7
-      }
-      $B7: {  # continuing
-        %86:i32 = load %i
-        %x_95:i32 = let %86
-        %88:i32 = add %x_95, 1i
-        store %i, %88
-        next_iteration  # -> $B6
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B19: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %91:void = call %main_1
-    %92:vec4<f32> = load %x_GLF_color
-    %93:main_out = construct %92
-    ret %93
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B20: {
-    %95:i32 = convert %value
-    %96:bool = gte %value, -2147483648.0f
-    %97:i32 = select -2147483648i, %95, %96
-    %98:bool = lte %value, 2147483520.0f
-    %99:i32 = select 2147483647i, %97, %98
-    ret %99
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index c15daf7..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,197 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
-  el:f32 @offset(0)
-}
-
-buf0 = struct @align(4) {
-  x_GLF_uniform_float_values:array<strided_arr, 1> @offset(0)
-}
-
-strided_arr_1 = struct @align(4) {
-  el:i32 @offset(0)
-}
-
-buf1 = struct @align(4) {
-  x_GLF_uniform_int_values:array<strided_arr_1, 4> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %data:ptr<function, array<vec4<f32>, 2>, read_write> = var
-    %b:ptr<function, i32, read_write> = var
-    %y:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %11:f32 = load %10
-    %12:vec4<f32> = construct %11
-    %13:vec4<f32> = let %12
-    %14:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %15:f32 = load %14
-    %16:vec4<f32> = construct %15
-    %17:array<vec4<f32>, 2> = construct %13, %16
-    store %data, %17
-    %18:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %19:i32 = load %18
-    store %b, %19
-    %20:f32 = load_vector_element %gl_FragCoord, 1u
-    %21:i32 = call %tint_f32_to_i32, %20
-    %23:i32 = let %21
-    %24:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %25:i32 = load %24
-    %26:i32 = let %25
-    %27:f32 = load_vector_element %gl_FragCoord, 1u
-    %28:i32 = call %tint_f32_to_i32, %27
-    %29:i32 = or %26, %28
-    %30:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %31:i32 = load %30
-    %32:i32 = let %31
-    %33:i32 = max %23, %29
-    %34:i32 = min %33, %32
-    store %y, %34
-    %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %36:i32 = load %35
-    store %i, %36
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_82:ptr<function, bool, read_write> = var
-        %x_83:ptr<function, bool, read_write> = var
-        %39:i32 = load %i
-        %40:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %41:i32 = load %40
-        %42:bool = lt %39, %41
-        if %42 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %43:i32 = load %b
-        %44:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %45:i32 = load %44
-        %46:bool = gt %43, %45
-        %x_76:bool = let %46
-        store %x_83, %x_76
-        if %x_76 [t: $B7] {  # if_2
-          $B7: {  # true
-            %48:i32 = load %y
-            %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %50:i32 = load %49
-            %51:bool = gt %48, %50
-            store %x_82, %51
-            %52:bool = load %x_82
-            store %x_83, %52
-            exit_if  # if_2
-          }
-        }
-        %53:bool = load %x_83
-        if %53 [t: $B8] {  # if_3
-          $B8: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %54:i32 = load %b
-        %55:i32 = add %54, 1i
-        store %b, %55
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %56:i32 = load %i
-        %57:i32 = add %56, 1i
-        store %i, %57
-        next_iteration  # -> $B3
-      }
-    }
-    %58:i32 = load %b
-    %59:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %60:i32 = load %59
-    %61:bool = eq %58, %60
-    if %61 [t: $B9] {  # if_4
-      $B9: {  # true
-        %62:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %63:i32 = load %62
-        %x_97:i32 = let %63
-        %65:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %66:i32 = load %65
-        %x_99:i32 = let %66
-        %68:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %69:i32 = load %68
-        %x_101:i32 = let %69
-        %71:i32 = max %x_97, %x_99
-        %72:i32 = min %71, %x_101
-        %73:ptr<function, vec4<f32>, read_write> = access %data, %72
-        %74:ptr<function, vec4<f32>, read_write> = let %73
-        %75:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %76:i32 = load %75
-        %77:f32 = convert %76
-        %78:f32 = let %77
-        %79:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %80:i32 = load %79
-        %81:f32 = convert %80
-        %82:f32 = let %81
-        %83:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %84:i32 = load %83
-        %85:f32 = convert %84
-        %86:f32 = let %85
-        %87:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %88:i32 = load %87
-        %89:f32 = convert %88
-        %90:vec4<f32> = construct %78, %82, %86, %89
-        store %74, %90
-        exit_if  # if_4
-      }
-    }
-    %91:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %92:i32 = load %91
-    %93:ptr<function, vec4<f32>, read_write> = access %data, %92
-    %94:vec4<f32> = load %93
-    %x_120:vec4<f32> = let %94
-    %96:f32 = access %x_120, 0u
-    %97:f32 = access %x_120, 1u
-    %98:f32 = access %x_120, 2u
-    %99:f32 = access %x_120, 3u
-    %100:vec4<f32> = construct %96, %97, %98, %99
-    store %x_GLF_color, %100
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B10: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %103:void = call %main_1
-    %104:vec4<f32> = load %x_GLF_color
-    %105:main_out = construct %104
-    ret %105
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B11: {
-    %107:i32 = convert %value
-    %108:bool = gte %value, -2147483648.0f
-    %109:i32 = select -2147483648i, %107, %108
-    %110:bool = lte %value, 2147483520.0f
-    %111:i32 = select 2147483647i, %109, %110
-    ret %111
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 8142215..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-clamp-array-access/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,219 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
-  el:f32 @offset(0)
-}
-
-buf0 = struct @align(4) {
-  x_GLF_uniform_float_values:array<strided_arr, 1> @offset(0)
-}
-
-strided_arr_1 = struct @align(4) {
-  el:i32 @offset(0)
-}
-
-buf1 = struct @align(4) {
-  x_GLF_uniform_int_values:array<strided_arr_1, 4> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %data:ptr<function, array<vec4<f32>, 2>, read_write> = var
-    %b:ptr<function, i32, read_write> = var
-    %y:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %11:f32 = load %10
-    %x_42:f32 = let %11
-    %13:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
-    %14:f32 = load %13
-    %x_45:f32 = let %14
-    %16:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
-    %17:vec4<f32> = let %16
-    %18:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
-    %19:array<vec4<f32>, 2> = construct %17, %18
-    store %data, %19
-    %20:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %21:i32 = load %20
-    %x_49:i32 = let %21
-    store %b, %x_49
-    %23:f32 = load_vector_element %gl_FragCoord, 1u
-    %x_51:f32 = let %23
-    %25:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %26:i32 = load %25
-    %x_54:i32 = let %26
-    %28:f32 = load_vector_element %gl_FragCoord, 1u
-    %x_56:f32 = let %28
-    %30:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %31:i32 = load %30
-    %x_60:i32 = let %31
-    %33:i32 = call %tint_f32_to_i32, %x_51
-    %35:i32 = let %33
-    %36:i32 = call %tint_f32_to_i32, %x_56
-    %37:i32 = or %x_54, %36
-    %38:i32 = max %35, %37
-    %39:i32 = min %38, %x_60
-    store %y, %39
-    %40:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %41:i32 = load %40
-    %x_63:i32 = let %41
-    store %i, %x_63
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_82:ptr<function, bool, read_write> = var
-        %x_83_phi:ptr<function, bool, read_write> = var
-        %45:i32 = load %i
-        %x_68:i32 = let %45
-        %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %48:i32 = load %47
-        %x_70:i32 = let %48
-        %50:bool = lt %x_68, %x_70
-        if %50 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %51:i32 = load %b
-        %x_73:i32 = let %51
-        %53:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-        %54:i32 = load %53
-        %x_75:i32 = let %54
-        %56:bool = gt %x_73, %x_75
-        %x_76:bool = let %56
-        store %x_83_phi, %x_76
-        if %x_76 [t: $B7] {  # if_2
-          $B7: {  # true
-            %58:i32 = load %y
-            %x_79:i32 = let %58
-            %60:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-            %61:i32 = load %60
-            %x_81:i32 = let %61
-            %63:bool = gt %x_79, %x_81
-            store %x_82, %63
-            %64:bool = load %x_82
-            store %x_83_phi, %64
-            exit_if  # if_2
-          }
-        }
-        %65:bool = load %x_83_phi
-        %x_83:bool = let %65
-        if %x_83 [t: $B8] {  # if_3
-          $B8: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %67:i32 = load %b
-        %x_86:i32 = let %67
-        %69:i32 = add %x_86, 1i
-        store %b, %69
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %70:i32 = load %i
-        %x_88:i32 = let %70
-        %72:i32 = add %x_88, 1i
-        store %i, %72
-        next_iteration  # -> $B3
-      }
-    }
-    %73:i32 = load %b
-    %x_90:i32 = let %73
-    %75:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
-    %76:i32 = load %75
-    %x_92:i32 = let %76
-    %78:bool = eq %x_90, %x_92
-    if %78 [t: $B9] {  # if_4
-      $B9: {  # true
-        %79:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %80:i32 = load %79
-        %x_97:i32 = let %80
-        %82:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %83:i32 = load %82
-        %x_99:i32 = let %83
-        %85:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
-        %86:i32 = load %85
-        %x_101:i32 = let %86
-        %88:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %89:i32 = load %88
-        %x_104:i32 = let %89
-        %91:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %92:i32 = load %91
-        %x_107:i32 = let %92
-        %94:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
-        %95:i32 = load %94
-        %x_110:i32 = let %95
-        %97:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-        %98:i32 = load %97
-        %x_113:i32 = let %98
-        %100:i32 = max %x_97, %x_99
-        %101:i32 = min %100, %x_101
-        %102:ptr<function, vec4<f32>, read_write> = access %data, %101
-        %103:ptr<function, vec4<f32>, read_write> = let %102
-        %104:f32 = convert %x_104
-        %105:f32 = let %104
-        %106:f32 = convert %x_107
-        %107:f32 = let %106
-        %108:f32 = convert %x_110
-        %109:f32 = let %108
-        %110:f32 = convert %x_113
-        %111:vec4<f32> = construct %105, %107, %109, %110
-        store %103, %111
-        exit_if  # if_4
-      }
-    }
-    %112:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
-    %113:i32 = load %112
-    %x_118:i32 = let %113
-    %115:ptr<function, vec4<f32>, read_write> = access %data, %x_118
-    %116:vec4<f32> = load %115
-    %x_120:vec4<f32> = let %116
-    %118:f32 = access %x_120, 0u
-    %119:f32 = access %x_120, 1u
-    %120:f32 = access %x_120, 2u
-    %121:f32 = access %x_120, 3u
-    %122:vec4<f32> = construct %118, %119, %120, %121
-    store %x_GLF_color, %122
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B10: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %125:void = call %main_1
-    %126:vec4<f32> = load %x_GLF_color
-    %127:main_out = construct %126
-    ret %127
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B11: {
-    %129:i32 = convert %value
-    %130:bool = gte %value, -2147483648.0f
-    %131:i32 = select -2147483648i, %129, %130
-    %132:bool = lte %value, 2147483520.0f
-    %133:i32 = select 2147483647i, %131, %132
-    ret %133
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index c6a3ce3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,152 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
-  el:f32 @offset(0)
-}
-
-buf1 = struct @align(4) {
-  x_GLF_uniform_float_values:array<strided_arr, 4> @offset(0)
-}
-
-strided_arr_1 = struct @align(4) {
-  el:i32 @offset(0)
-}
-
-buf0 = struct @align(4) {
-  x_GLF_uniform_int_values:array<strided_arr_1, 1> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-}
-
-%main_1 = func():void {
-  $B2: {
-    %icoord:ptr<function, vec2<i32>, read_write> = var
-    %x_40:ptr<function, f32, read_write> = var
-    %icoord_1:ptr<function, vec2<i32>, read_write> = var
-    %9:f32 = load_vector_element %gl_FragCoord, 0u
-    %10:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %11:f32 = load %10
-    %12:f32 = mul %9, %11
-    %13:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %14:f32 = load %13
-    %15:bool = gt %12, %14
-    if %15 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        %16:vec4<f32> = load %gl_FragCoord
-        %17:vec2<f32> = swizzle %16, xy
-        %18:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %19:f32 = load %18
-        %20:vec2<f32> = mul %17, %19
-        %21:vec2<f32> = let %20
-        %22:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %23:f32 = load %22
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %25:f32 = load %24
-        %26:vec2<f32> = construct %23, %25
-        %27:vec2<f32> = sub %21, %26
-        %28:vec2<i32> = call %tint_v2f32_to_v2i32, %27
-        store %icoord, %28
-        %30:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %31:f32 = load %30
-        %x_65:f32 = let %31
-        %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %34:f32 = load %33
-        %x_67:f32 = let %34
-        %36:i32 = load_vector_element %icoord, 0u
-        %37:i32 = load_vector_element %icoord, 1u
-        %38:i32 = mul %36, %37
-        %39:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %40:i32 = load %39
-        %41:bool = neq %38, %40
-        if %41 [t: $B5, f: $B6] {  # if_2
-          $B5: {  # true
-            %42:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-            %43:f32 = load %42
-            store %x_40, %43
-            exit_if  # if_2
-          }
-          $B6: {  # false
-            %44:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-            %45:f32 = load %44
-            store %x_40, %45
-            exit_if  # if_2
-          }
-        }
-        %46:f32 = load %x_40
-        %47:f32 = let %46
-        %48:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %49:i32 = load %48
-        %50:f32 = convert %49
-        %51:vec4<f32> = construct %x_65, %x_67, %47, %50
-        store %x_GLF_color, %51
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        %52:vec4<f32> = load %gl_FragCoord
-        %53:vec2<f32> = swizzle %52, xy
-        %54:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %55:f32 = load %54
-        %56:vec2<f32> = mul %53, %55
-        %57:vec2<f32> = let %56
-        %58:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %59:f32 = load %58
-        %60:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %61:f32 = load %60
-        %62:vec2<f32> = construct %59, %61
-        %63:vec2<f32> = sub %57, %62
-        %64:vec2<i32> = call %tint_v2f32_to_v2i32, %63
-        store %icoord_1, %64
-        %65:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %66:f32 = load %65
-        %67:f32 = let %66
-        %68:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %69:f32 = load %68
-        %70:f32 = let %69
-        %71:i32 = load_vector_element %icoord_1, 0u
-        %72:f32 = convert %71
-        %73:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %74:f32 = load %73
-        %75:vec4<f32> = construct %67, %70, %72, %74
-        store %x_GLF_color, %75
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %78:void = call %main_1
-    %79:vec4<f32> = load %x_GLF_color
-    %80:main_out = construct %79
-    ret %80
-  }
-}
-%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
-  $B8: {
-    %82:vec2<i32> = convert %value
-    %83:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
-    %84:vec2<i32> = select vec2<i32>(-2147483648i), %82, %83
-    %85:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
-    %86:vec2<i32> = select vec2<i32>(2147483647i), %84, %85
-    ret %86
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 466f330..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-fragcoord-multiply/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,175 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
-  el:f32 @offset(0)
-}
-
-buf1 = struct @align(4) {
-  x_GLF_uniform_float_values:array<strided_arr, 4> @offset(0)
-}
-
-strided_arr_1 = struct @align(4) {
-  el:i32 @offset(0)
-}
-
-buf0 = struct @align(4) {
-  x_GLF_uniform_int_values:array<strided_arr_1, 1> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-}
-
-%main_1 = func():void {
-  $B2: {
-    %icoord:ptr<function, vec2<i32>, read_write> = var
-    %x_40:ptr<function, f32, read_write> = var
-    %icoord_1:ptr<function, vec2<i32>, read_write> = var
-    %9:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_42:f32 = let %9
-    %11:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-    %12:f32 = load %11
-    %x_44:f32 = let %12
-    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-    %15:f32 = load %14
-    %x_47:f32 = let %15
-    %17:f32 = mul %x_42, %x_44
-    %18:bool = gt %17, %x_47
-    if %18 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        %19:vec4<f32> = load %gl_FragCoord
-        %x_52:vec4<f32> = let %19
-        %21:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %22:f32 = load %21
-        %x_55:f32 = let %22
-        %24:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %25:f32 = load %24
-        %x_58:f32 = let %25
-        %27:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %28:f32 = load %27
-        %x_60:f32 = let %28
-        %30:f32 = access %x_52, 0u
-        %31:f32 = access %x_52, 1u
-        %32:vec2<f32> = construct %30, %31
-        %33:vec2<f32> = mul %32, %x_55
-        %34:vec2<f32> = let %33
-        %35:vec2<f32> = construct %x_58, %x_60
-        %36:vec2<f32> = sub %34, %35
-        %37:vec2<i32> = call %tint_v2f32_to_v2i32, %36
-        store %icoord, %37
-        %39:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %40:f32 = load %39
-        %x_65:f32 = let %40
-        %42:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %43:f32 = load %42
-        %x_67:f32 = let %43
-        %45:i32 = load_vector_element %icoord, 0u
-        %x_69:i32 = let %45
-        %47:i32 = load_vector_element %icoord, 1u
-        %x_71:i32 = let %47
-        %49:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %50:i32 = load %49
-        %x_74:i32 = let %50
-        %52:i32 = mul %x_69, %x_71
-        %53:bool = neq %52, %x_74
-        if %53 [t: $B5, f: $B6] {  # if_2
-          $B5: {  # true
-            %54:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-            %55:f32 = load %54
-            %x_80:f32 = let %55
-            store %x_40, %x_80
-            exit_if  # if_2
-          }
-          $B6: {  # false
-            %57:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-            %58:f32 = load %57
-            %x_82:f32 = let %58
-            store %x_40, %x_82
-            exit_if  # if_2
-          }
-        }
-        %60:f32 = load %x_40
-        %x_83:f32 = let %60
-        %62:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
-        %63:i32 = load %62
-        %x_85:i32 = let %63
-        %65:f32 = convert %x_85
-        %66:vec4<f32> = construct %x_65, %x_67, %x_83, %65
-        store %x_GLF_color, %66
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        %67:vec4<f32> = load %gl_FragCoord
-        %x_88:vec4<f32> = let %67
-        %69:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
-        %70:f32 = load %69
-        %x_91:f32 = let %70
-        %72:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
-        %73:f32 = load %72
-        %x_94:f32 = let %73
-        %75:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
-        %76:f32 = load %75
-        %x_96:f32 = let %76
-        %78:f32 = access %x_88, 0u
-        %79:f32 = access %x_88, 1u
-        %80:vec2<f32> = construct %78, %79
-        %81:vec2<f32> = mul %80, %x_91
-        %82:vec2<f32> = let %81
-        %83:vec2<f32> = construct %x_94, %x_96
-        %84:vec2<f32> = sub %82, %83
-        %85:vec2<i32> = call %tint_v2f32_to_v2i32, %84
-        store %icoord_1, %85
-        %86:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %87:f32 = load %86
-        %x_101:f32 = let %87
-        %89:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %90:f32 = load %89
-        %x_103:f32 = let %90
-        %92:i32 = load_vector_element %icoord_1, 0u
-        %x_105:i32 = let %92
-        %94:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
-        %95:f32 = load %94
-        %x_108:f32 = let %95
-        %97:f32 = convert %x_105
-        %98:vec4<f32> = construct %x_101, %x_103, %97, %x_108
-        store %x_GLF_color, %98
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %101:void = call %main_1
-    %102:vec4<f32> = load %x_GLF_color
-    %103:main_out = construct %102
-    ret %103
-  }
-}
-%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
-  $B8: {
-    %105:vec2<i32> = convert %value
-    %106:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
-    %107:vec2<i32> = select vec2<i32>(-2147483648i), %105, %106
-    %108:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
-    %109:vec2<i32> = select vec2<i32>(2147483647i), %107, %108
-    ret %109
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index 496ef8c..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,112 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %a:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    store %a, 0i
-    store %i, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %6:i32 = load %i
-        %7:i32 = let %6
-        %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %9:f32 = load_vector_element %8, 1u
-        %10:i32 = call %tint_f32_to_i32, %9
-        %12:bool = lt %7, %10
-        if %12 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %13:i32 = load %a
-        %14:bool = gt %13, 0i
-        if %14 [t: $B7] {  # if_2
-          $B7: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %15:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %16:f32 = load_vector_element %15, 1u
-        %17:i32 = call %tint_f32_to_i32, %16
-        %18:i32 = mul %17, 2i
-        %19:i32 = call %tint_div_i32, %18, 2i
-        store %a, %19
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %21:i32 = load %i
-        %22:i32 = add %21, 1i
-        store %i, %22
-        next_iteration  # -> $B3
-      }
-    }
-    %23:i32 = load %a
-    %24:bool = eq %23, 1i
-    if %24 [t: $B8, f: $B9] {  # if_3
-      $B8: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_3
-      }
-      $B9: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f)
-        exit_if  # if_3
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B10: {
-    %26:void = call %main_1
-    %27:vec4<f32> = load %x_GLF_color
-    %28:main_out = construct %27
-    ret %28
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B11: {
-    %31:bool = eq %rhs, 0i
-    %32:bool = eq %lhs, -2147483648i
-    %33:bool = eq %rhs, -1i
-    %34:bool = and %32, %33
-    %35:bool = or %31, %34
-    %36:i32 = select %rhs, 1i, %35
-    %37:i32 = div %lhs, %36
-    ret %37
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %39:i32 = convert %value
-    %40:bool = gte %value, -2147483648.0f
-    %41:i32 = select -2147483648i, %39, %40
-    %42:bool = lte %value, 2147483520.0f
-    %43:i32 = select 2147483647i, %41, %42
-    ret %43
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 42e494f..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-machinevaluetype-one-iter-loop/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,117 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %a:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    store %a, 0i
-    store %i, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %6:i32 = load %i
-        %x_33:i32 = let %6
-        %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %9:f32 = load_vector_element %8, 1u
-        %x_35:f32 = let %9
-        %11:i32 = call %tint_f32_to_i32, %x_35
-        %13:bool = lt %x_33, %11
-        if %13 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %14:i32 = load %a
-        %x_39:i32 = let %14
-        %16:bool = gt %x_39, 0i
-        if %16 [t: $B7] {  # if_2
-          $B7: {  # true
-            exit_loop  # loop_1
-          }
-        }
-        %17:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
-        %18:f32 = load_vector_element %17, 1u
-        %x_44:f32 = let %18
-        %20:i32 = call %tint_f32_to_i32, %x_44
-        %21:i32 = mul %20, 2i
-        %22:i32 = call %tint_div_i32, %21, 2i
-        store %a, %22
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %24:i32 = load %i
-        %x_48:i32 = let %24
-        %26:i32 = add %x_48, 1i
-        store %i, %26
-        next_iteration  # -> $B3
-      }
-    }
-    %27:i32 = load %a
-    %x_50:i32 = let %27
-    %29:bool = eq %x_50, 1i
-    if %29 [t: $B8, f: $B9] {  # if_3
-      $B8: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_3
-      }
-      $B9: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f)
-        exit_if  # if_3
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B10: {
-    %31:void = call %main_1
-    %32:vec4<f32> = load %x_GLF_color
-    %33:main_out = construct %32
-    ret %33
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B11: {
-    %36:bool = eq %rhs, 0i
-    %37:bool = eq %lhs, -2147483648i
-    %38:bool = eq %rhs, -1i
-    %39:bool = and %37, %38
-    %40:bool = or %36, %39
-    %41:i32 = select %rhs, 1i, %40
-    %42:i32 = div %lhs, %41
-    ret %42
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %44:i32 = convert %value
-    %45:bool = gte %value, -2147483648.0f
-    %46:i32 = select -2147483648i, %44, %45
-    %47:bool = lte %value, 2147483520.0f
-    %48:i32 = select 2147483647i, %46, %47
-    ret %48
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index 716ba30..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,58 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %4:f32 = load_vector_element %gl_FragCoord, 0u
-    %5:f32 = mul %4, 0.00390625f
-    %6:f32 = let %5
-    %7:f32 = load_vector_element %gl_FragCoord, 0u
-    %8:i32 = call %tint_f32_to_i32, %7
-    %10:i32 = let %8
-    %11:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:i32 = call %tint_f32_to_i32, %11
-    %13:i32 = xor %10, %12
-    %14:f32 = convert %13
-    %15:f32 = mul %14, 0.00390625f
-    %16:f32 = load_vector_element %gl_FragCoord, 1u
-    %17:f32 = mul %16, 0.00390625f
-    %18:vec4<f32> = construct %6, %15, %17, 1.0f
-    store %x_GLF_color, %18
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B3: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    ret %23
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B4: {
-    %25:i32 = convert %value
-    %26:bool = gte %value, -2147483648.0f
-    %27:i32 = select -2147483648i, %25, %26
-    %28:bool = lte %value, 2147483520.0f
-    %29:i32 = select 2147483647i, %27, %28
-    ret %29
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 823b658..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-min-nested-loop-same-value-for-variables/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,61 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %4:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_20:f32 = let %4
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_23:f32 = let %6
-    %8:f32 = load_vector_element %gl_FragCoord, 1u
-    %x_26:f32 = let %8
-    %10:f32 = load_vector_element %gl_FragCoord, 1u
-    %x_32:f32 = let %10
-    %12:f32 = mul %x_20, 0.00390625f
-    %13:i32 = call %tint_f32_to_i32, %x_23
-    %15:i32 = let %13
-    %16:i32 = call %tint_f32_to_i32, %x_26
-    %17:i32 = xor %15, %16
-    %18:f32 = convert %17
-    %19:f32 = mul %18, 0.00390625f
-    %20:f32 = mul %x_32, 0.00390625f
-    %21:vec4<f32> = construct %12, %19, %20, 1.0f
-    store %x_GLF_color, %21
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B3: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %24:void = call %main_1
-    %25:vec4<f32> = load %x_GLF_color
-    %26:main_out = construct %25
-    ret %26
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B4: {
-    %28:i32 = convert %value
-    %29:bool = gte %value, -2147483648.0f
-    %30:i32 = select -2147483648i, %28, %29
-    %31:bool = lte %value, 2147483520.0f
-    %32:i32 = select 2147483647i, %30, %31
-    ret %32
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index a989a5d..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,163 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
-  one:f32 @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %a:ptr<function, vec2<f32>, read_write> = var
-    %b:ptr<function, vec3<f32>, read_write> = var
-    %x_105:ptr<function, bool, read_write> = var
-    %x_106:ptr<function, bool, read_write> = var
-    %x_111:ptr<function, bool, read_write> = var
-    %x_112:ptr<function, bool, read_write> = var
-    store %a, vec2<f32>(1.0f)
-    store %b, vec3<f32>(0.0f)
-    %11:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:i32 = call %tint_f32_to_i32, %11
-    %14:bool = lt %12, 40i
-    if %14 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        store %b, vec3<f32>(0.10000000149011611938f)
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        %15:f32 = load_vector_element %gl_FragCoord, 1u
-        %16:i32 = call %tint_f32_to_i32, %15
-        %17:bool = lt %16, 60i
-        if %17 [t: $B5, f: $B6] {  # if_2
-          $B5: {  # true
-            store %b, vec3<f32>(0.20000000298023223877f)
-            exit_if  # if_2
-          }
-          $B6: {  # false
-            %18:f32 = load_vector_element %gl_FragCoord, 1u
-            %19:bool = lt %18, 80.0f
-            if %19 [t: $B7, f: $B8] {  # if_3
-              $B7: {  # true
-                %20:f32 = load_vector_element %a, 0u
-                %21:vec3<f32> = construct %20
-                %22:vec3<f32> = let %21
-                %23:ptr<uniform, f32, read> = access %x_8, 0u
-                %24:f32 = load %23
-                %25:vec3<f32> = construct %24
-                %26:vec3<f32> = add %22, %25
-                %27:vec3<f32> = cos %26
-                %28:vec3<f32> = add %27, vec3<f32>(0.00999999977648258209f)
-                store %b, %28
-                exit_if  # if_3
-              }
-              $B8: {  # false
-                %29:f32 = load_vector_element %gl_FragCoord, 1u
-                %30:i32 = call %tint_f32_to_i32, %29
-                %31:bool = lt %30, 100i
-                if %31 [t: $B9, f: $B10] {  # if_4
-                  $B9: {  # true
-                    %32:ptr<uniform, f32, read> = access %x_8, 0u
-                    %33:f32 = load %32
-                    %34:vec3<f32> = construct %33
-                    %35:vec3<f32> = cos %34
-                    store %b, %35
-                    exit_if  # if_4
-                  }
-                  $B10: {  # false
-                    %36:f32 = load_vector_element %gl_FragCoord, 1u
-                    %37:i32 = call %tint_f32_to_i32, %36
-                    %38:bool = lt %37, 500i
-                    if %38 [t: $B11] {  # if_5
-                      $B11: {  # true
-                        store %b, vec3<f32>(0.540302276611328125f, 0.540302276611328125f, -0.99996083974838256836f)
-                        exit_if  # if_5
-                      }
-                    }
-                    exit_if  # if_4
-                  }
-                }
-                exit_if  # if_3
-              }
-            }
-            exit_if  # if_2
-          }
-        }
-        exit_if  # if_1
-      }
-    }
-    %39:f32 = load_vector_element %b, 0u
-    %40:bool = lt %39, 1.01999998092651367188f
-    %x_100:bool = let %40
-    store %x_106, %x_100
-    if %x_100 [t: $B12] {  # if_6
-      $B12: {  # true
-        %42:f32 = load_vector_element %b, 1u
-        %43:bool = lt %42, 1.01999998092651367188f
-        store %x_105, %43
-        %44:bool = load %x_105
-        store %x_106, %44
-        exit_if  # if_6
-      }
-    }
-    %45:bool = load %x_106
-    store %x_112, %45
-    %46:bool = load %x_106
-    if %46 [t: $B13] {  # if_7
-      $B13: {  # true
-        %47:f32 = load_vector_element %b, 2u
-        %48:bool = lt %47, 1.01999998092651367188f
-        store %x_111, %48
-        %49:bool = load %x_111
-        store %x_112, %49
-        exit_if  # if_7
-      }
-    }
-    %50:bool = load %x_112
-    if %50 [t: $B14, f: $B15] {  # if_8
-      $B14: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_8
-      }
-      $B15: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f)
-        exit_if  # if_8
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B16: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %53:void = call %main_1
-    %54:vec4<f32> = load %x_GLF_color
-    %55:main_out = construct %54
-    ret %55
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B17: {
-    %57:i32 = convert %value
-    %58:bool = gte %value, -2147483648.0f
-    %59:i32 = select -2147483648i, %57, %58
-    %60:bool = lte %value, 2147483520.0f
-    %61:i32 = select 2147483647i, %59, %60
-    ret %61
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 753b742..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-set-vector-cos-fragcoord/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,175 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
-  one:f32 @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %a:ptr<function, vec2<f32>, read_write> = var
-    %b:ptr<function, vec3<f32>, read_write> = var
-    %x_105:ptr<function, bool, read_write> = var
-    %x_111:ptr<function, bool, read_write> = var
-    %x_106_phi:ptr<function, bool, read_write> = var
-    %x_112_phi:ptr<function, bool, read_write> = var
-    store %a, vec2<f32>(1.0f)
-    store %b, vec3<f32>(0.0f)
-    %11:f32 = load_vector_element %gl_FragCoord, 1u
-    %x_52:f32 = let %11
-    %13:i32 = call %tint_f32_to_i32, %x_52
-    %15:bool = lt %13, 40i
-    if %15 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        store %b, vec3<f32>(0.10000000149011611938f)
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        %16:f32 = load_vector_element %gl_FragCoord, 1u
-        %x_59:f32 = let %16
-        %18:i32 = call %tint_f32_to_i32, %x_59
-        %19:bool = lt %18, 60i
-        if %19 [t: $B5, f: $B6] {  # if_2
-          $B5: {  # true
-            store %b, vec3<f32>(0.20000000298023223877f)
-            exit_if  # if_2
-          }
-          $B6: {  # false
-            %20:f32 = load_vector_element %gl_FragCoord, 1u
-            %x_66:f32 = let %20
-            %22:bool = lt %x_66, 80.0f
-            if %22 [t: $B7, f: $B8] {  # if_3
-              $B7: {  # true
-                %23:f32 = load_vector_element %a, 0u
-                %x_72:f32 = let %23
-                %25:ptr<uniform, f32, read> = access %x_8, 0u
-                %26:f32 = load %25
-                %x_74:f32 = let %26
-                %28:vec3<f32> = construct %x_72, %x_72, %x_72
-                %29:vec3<f32> = let %28
-                %30:vec3<f32> = construct %x_74, %x_74, %x_74
-                %31:vec3<f32> = add %29, %30
-                %32:vec3<f32> = cos %31
-                %33:vec3<f32> = add %32, vec3<f32>(0.00999999977648258209f)
-                store %b, %33
-                exit_if  # if_3
-              }
-              $B8: {  # false
-                %34:f32 = load_vector_element %gl_FragCoord, 1u
-                %x_82:f32 = let %34
-                %36:i32 = call %tint_f32_to_i32, %x_82
-                %37:bool = lt %36, 100i
-                if %37 [t: $B9, f: $B10] {  # if_4
-                  $B9: {  # true
-                    %38:ptr<uniform, f32, read> = access %x_8, 0u
-                    %39:f32 = load %38
-                    %x_89:f32 = let %39
-                    %41:vec3<f32> = construct %x_89, %x_89, %x_89
-                    %42:vec3<f32> = cos %41
-                    store %b, %42
-                    exit_if  # if_4
-                  }
-                  $B10: {  # false
-                    %43:f32 = load_vector_element %gl_FragCoord, 1u
-                    %x_93:f32 = let %43
-                    %45:i32 = call %tint_f32_to_i32, %x_93
-                    %46:bool = lt %45, 500i
-                    if %46 [t: $B11] {  # if_5
-                      $B11: {  # true
-                        store %b, vec3<f32>(0.540302276611328125f, 0.540302276611328125f, -0.99996083974838256836f)
-                        exit_if  # if_5
-                      }
-                    }
-                    exit_if  # if_4
-                  }
-                }
-                exit_if  # if_3
-              }
-            }
-            exit_if  # if_2
-          }
-        }
-        exit_if  # if_1
-      }
-    }
-    %47:f32 = load_vector_element %b, 0u
-    %x_99:f32 = let %47
-    %49:bool = lt %x_99, 1.01999998092651367188f
-    %x_100:bool = let %49
-    store %x_106_phi, %x_100
-    if %x_100 [t: $B12] {  # if_6
-      $B12: {  # true
-        %51:f32 = load_vector_element %b, 1u
-        %x_104:f32 = let %51
-        %53:bool = lt %x_104, 1.01999998092651367188f
-        store %x_105, %53
-        %54:bool = load %x_105
-        store %x_106_phi, %54
-        exit_if  # if_6
-      }
-    }
-    %55:bool = load %x_106_phi
-    %x_106:bool = let %55
-    store %x_112_phi, %x_106
-    if %x_106 [t: $B13] {  # if_7
-      $B13: {  # true
-        %57:f32 = load_vector_element %b, 2u
-        %x_110:f32 = let %57
-        %59:bool = lt %x_110, 1.01999998092651367188f
-        store %x_111, %59
-        %60:bool = load %x_111
-        store %x_112_phi, %60
-        exit_if  # if_7
-      }
-    }
-    %61:bool = load %x_112_phi
-    %x_112:bool = let %61
-    if %x_112 [t: $B14, f: $B15] {  # if_8
-      $B14: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_8
-      }
-      $B15: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f)
-        exit_if  # if_8
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B16: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %65:void = call %main_1
-    %66:vec4<f32> = load %x_GLF_color
-    %67:main_out = construct %66
-    ret %67
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B17: {
-    %69:i32 = convert %value
-    %70:bool = gte %value, -2147483648.0f
-    %71:i32 = select -2147483648i, %69, %70
-    %72:bool = lte %value, 2147483520.0f
-    %73:i32 = select 2147483647i, %71, %72
-    ret %73
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index 2db9224..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,116 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %g:ptr<private, i32, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %a:ptr<function, i32, read_write> = var
-    store %g, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %6:i32 = load %g
-        %7:i32 = let %6
-        %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %9:f32 = load_vector_element %8, 0u
-        %10:f32 = add %9, 2.0f
-        %11:i32 = call %tint_f32_to_i32, %10
-        %13:bool = lt %7, %11
-        if %13 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %14:i32 = load %g
-        %15:i32 = add %14, 1i
-        store %g, %15
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        next_iteration  # -> $B3
-      }
-    }
-    %16:i32 = load %g
-    store %a, %16
-    loop [b: $B7, c: $B8] {  # loop_2
-      $B7: {  # body
-        %17:i32 = load %g
-        %18:i32 = let %17
-        %19:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %20:f32 = load_vector_element %19, 1u
-        %21:i32 = call %tint_f32_to_i32, %20
-        %22:bool = lt %18, %21
-        if %22 [t: $B9, f: $B10] {  # if_2
-          $B9: {  # true
-            exit_if  # if_2
-          }
-          $B10: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        %23:i32 = load %g
-        %24:i32 = add %23, 1i
-        store %g, %24
-        continue  # -> $B8
-      }
-      $B8: {  # continuing
-        next_iteration  # -> $B7
-      }
-    }
-    %25:i32 = load %a
-    store %a, %25
-    %26:i32 = load %a
-    %27:bool = eq %26, 2i
-    if %27 [t: $B11, f: $B12] {  # if_3
-      $B11: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_3
-      }
-      $B12: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f)
-        exit_if  # if_3
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B13: {
-    %29:void = call %main_1
-    %30:vec4<f32> = load %x_GLF_color
-    %31:main_out = construct %30
-    ret %31
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B14: {
-    %33:i32 = convert %value
-    %34:bool = gte %value, -2147483648.0f
-    %35:i32 = select -2147483648i, %33, %34
-    %36:bool = lte %value, 2147483520.0f
-    %37:i32 = select 2147483647i, %35, %36
-    ret %37
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index adb5eb0..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-single-block-elim-self-assign/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,123 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %g:ptr<private, i32, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %a:ptr<function, i32, read_write> = var
-    store %g, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %6:i32 = load %g
-        %x_8:i32 = let %6
-        %8:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %9:f32 = load_vector_element %8, 0u
-        %x_46:f32 = let %9
-        %11:f32 = add %x_46, 2.0f
-        %12:i32 = call %tint_f32_to_i32, %11
-        %14:bool = lt %x_8, %12
-        if %14 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %15:i32 = load %g
-        %x_9:i32 = let %15
-        %17:i32 = add %x_9, 1i
-        store %g, %17
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        next_iteration  # -> $B3
-      }
-    }
-    %18:i32 = load %g
-    %x_11:i32 = let %18
-    store %a, %x_11
-    loop [b: $B7, c: $B8] {  # loop_2
-      $B7: {  # body
-        %20:i32 = load %g
-        %x_12:i32 = let %20
-        %22:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-        %23:f32 = load_vector_element %22, 1u
-        %x_56:f32 = let %23
-        %25:i32 = call %tint_f32_to_i32, %x_56
-        %26:bool = lt %x_12, %25
-        if %26 [t: $B9, f: $B10] {  # if_2
-          $B9: {  # true
-            exit_if  # if_2
-          }
-          $B10: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        %27:i32 = load %g
-        %x_13:i32 = let %27
-        %29:i32 = add %x_13, 1i
-        store %g, %29
-        continue  # -> $B8
-      }
-      $B8: {  # continuing
-        next_iteration  # -> $B7
-      }
-    }
-    %30:i32 = load %a
-    %x_15:i32 = let %30
-    store %a, %x_15
-    %32:i32 = load %a
-    %x_16:i32 = let %32
-    %34:bool = eq %x_16, 2i
-    if %34 [t: $B11, f: $B12] {  # if_3
-      $B11: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_3
-      }
-      $B12: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f)
-        exit_if  # if_3
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B13: {
-    %36:void = call %main_1
-    %37:vec4<f32> = load %x_GLF_color
-    %38:main_out = construct %37
-    ret %38
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B14: {
-    %40:i32 = convert %value
-    %41:bool = gte %value, -2147483648.0f
-    %42:i32 = select -2147483648i, %40, %41
-    %43:bool = lte %value, 2147483520.0f
-    %44:i32 = select 2147483647i, %42, %43
-    ret %44
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index 0c8e028..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,259 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
-  el:i32 @offset(0)
-}
-
-buf1 = struct @align(4) {
-  x_GLF_uniform_int_values:array<strided_arr, 4> @offset(0)
-}
-
-strided_arr_1 = struct @align(4) {
-  el:f32 @offset(0)
-}
-
-buf0 = struct @align(4) {
-  x_GLF_uniform_float_values:array<strided_arr_1, 1> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
-  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %m0:ptr<function, mat4x4<f32>, read_write> = var
-    %c:ptr<function, i32, read_write> = var
-    %m1:ptr<function, mat4x4<f32>, read_write> = var
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %9:i32 = load %8
-    %10:f32 = convert %9
-    %x_41:f32 = let %10
-    %12:vec4<f32> = construct %x_41, 0.0f, 0.0f, 0.0f
-    %13:vec4<f32> = let %12
-    %14:vec4<f32> = construct 0.0f, %x_41, 0.0f, 0.0f
-    %15:vec4<f32> = let %14
-    %16:vec4<f32> = construct 0.0f, 0.0f, %x_41, 0.0f
-    %17:vec4<f32> = let %16
-    %18:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_41
-    %19:mat4x4<f32> = construct %13, %15, %17, %18
-    store %m0, %19
-    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %21:i32 = load %20
-    store %c, %21
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %22:i32 = load %c
-        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %24:i32 = load %23
-        %25:bool = lt %22, %24
-        if %25 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %26:mat4x4<f32> = load %m0
-        store %m1, %26
-        %27:i32 = load %c
-        %x_59:i32 = let %27
-        %29:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %30:i32 = load %29
-        %x_61:i32 = let %30
-        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %33:i32 = load %32
-        %x_64:i32 = let %33
-        %35:i32 = call %tint_mod_i32, %x_59, %x_61
-        %37:ptr<function, vec4<f32>, read_write> = access %m1, %35
-        %38:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %39:f32 = load %38
-        store_vector_element %37, %x_64, %39
-        %40:i32 = load %c
-        %x_68:i32 = let %40
-        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %43:i32 = load %42
-        %x_70:i32 = let %43
-        %45:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %46:i32 = load %45
-        %x_73:i32 = let %46
-        %48:i32 = call %tint_mod_i32, %x_68, %x_70
-        %49:ptr<function, vec4<f32>, read_write> = access %m0, %48
-        %50:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %51:f32 = load %50
-        store_vector_element %49, %x_73, %51
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %52:i32 = load %c
-        %53:i32 = add %52, 1i
-        store %c, %53
-        next_iteration  # -> $B3
-      }
-    }
-    %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %55:i32 = load %54
-    %56:f32 = convert %55
-    %57:f32 = let %56
-    %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %59:i32 = load %58
-    %60:f32 = convert %59
-    %61:f32 = let %60
-    %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %63:i32 = load %62
-    %64:f32 = convert %63
-    %65:f32 = let %64
-    %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %67:i32 = load %66
-    %68:f32 = convert %67
-    %69:vec4<f32> = construct %57, %61, %65, %68
-    %70:vec4<f32> = let %69
-    %71:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %72:i32 = load %71
-    %73:f32 = convert %72
-    %74:f32 = let %73
-    %75:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %76:i32 = load %75
-    %77:f32 = convert %76
-    %78:f32 = let %77
-    %79:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %80:i32 = load %79
-    %81:f32 = convert %80
-    %82:f32 = let %81
-    %83:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %84:i32 = load %83
-    %85:f32 = convert %84
-    %86:vec4<f32> = construct %74, %78, %82, %85
-    %87:vec4<f32> = let %86
-    %88:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %89:i32 = load %88
-    %90:f32 = convert %89
-    %91:f32 = let %90
-    %92:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %93:i32 = load %92
-    %94:f32 = convert %93
-    %95:f32 = let %94
-    %96:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %97:i32 = load %96
-    %98:f32 = convert %97
-    %99:f32 = let %98
-    %100:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %101:i32 = load %100
-    %102:f32 = convert %101
-    %103:vec4<f32> = construct %91, %95, %99, %102
-    %104:vec4<f32> = let %103
-    %105:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %106:i32 = load %105
-    %107:f32 = convert %106
-    %108:f32 = let %107
-    %109:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %110:i32 = load %109
-    %111:f32 = convert %110
-    %112:f32 = let %111
-    %113:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %114:i32 = load %113
-    %115:f32 = convert %114
-    %116:f32 = let %115
-    %117:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %118:i32 = load %117
-    %119:f32 = convert %118
-    %120:vec4<f32> = construct %108, %112, %116, %119
-    %121:mat4x4<f32> = construct %70, %87, %104, %120
-    %x_132:mat4x4<f32> = let %121
-    %123:ptr<function, vec4<f32>, read_write> = access %m0, 0u
-    %124:vec4<f32> = load %123
-    %125:vec4<f32> = access %x_132, 0u
-    %126:vec4<bool> = eq %124, %125
-    %127:bool = all %126
-    %128:bool = let %127
-    %129:ptr<function, vec4<f32>, read_write> = access %m0, 1u
-    %130:vec4<f32> = load %129
-    %131:vec4<f32> = access %x_132, 1u
-    %132:vec4<bool> = eq %130, %131
-    %133:bool = all %132
-    %134:bool = and %128, %133
-    %135:bool = let %134
-    %136:ptr<function, vec4<f32>, read_write> = access %m0, 2u
-    %137:vec4<f32> = load %136
-    %138:vec4<f32> = access %x_132, 2u
-    %139:vec4<bool> = eq %137, %138
-    %140:bool = all %139
-    %141:bool = and %135, %140
-    %142:bool = let %141
-    %143:ptr<function, vec4<f32>, read_write> = access %m0, 3u
-    %144:vec4<f32> = load %143
-    %145:vec4<f32> = access %x_132, 3u
-    %146:vec4<bool> = eq %144, %145
-    %147:bool = all %146
-    %148:bool = and %142, %147
-    if %148 [t: $B7, f: $B8] {  # if_2
-      $B7: {  # true
-        %149:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %150:i32 = load %149
-        %151:f32 = convert %150
-        %152:f32 = let %151
-        %153:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %154:i32 = load %153
-        %155:f32 = convert %154
-        %156:f32 = let %155
-        %157:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %158:i32 = load %157
-        %159:f32 = convert %158
-        %160:f32 = let %159
-        %161:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %162:i32 = load %161
-        %163:f32 = convert %162
-        %164:vec4<f32> = construct %152, %156, %160, %163
-        store %x_GLF_color, %164
-        exit_if  # if_2
-      }
-      $B8: {  # false
-        %165:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %166:i32 = load %165
-        %167:f32 = convert %166
-        %168:vec4<f32> = construct %167
-        store %x_GLF_color, %168
-        exit_if  # if_2
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B9: {
-    %170:void = call %main_1
-    %171:vec4<f32> = load %x_GLF_color
-    %172:main_out = construct %171
-    ret %172
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B10: {
-    %175:bool = eq %rhs, 0i
-    %176:bool = eq %lhs, -2147483648i
-    %177:bool = eq %rhs, -1i
-    %178:bool = and %176, %177
-    %179:bool = or %175, %178
-    %180:i32 = select %rhs, 1i, %179
-    %181:i32 = let %180
-    %182:i32 = div %lhs, %181
-    %183:i32 = mul %182, %181
-    %184:i32 = sub %lhs, %183
-    ret %184
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index 048ba1a..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-unused-matrix-copy-inside-loop/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,287 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
-  el:i32 @offset(0)
-}
-
-buf1 = struct @align(4) {
-  x_GLF_uniform_int_values:array<strided_arr, 4> @offset(0)
-}
-
-strided_arr_1 = struct @align(4) {
-  el:f32 @offset(0)
-}
-
-buf0 = struct @align(4) {
-  x_GLF_uniform_float_values:array<strided_arr_1, 1> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
-  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %m0:ptr<function, mat4x4<f32>, read_write> = var
-    %c:ptr<function, i32, read_write> = var
-    %m1:ptr<function, mat4x4<f32>, read_write> = var
-    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %9:i32 = load %8
-    %x_40:i32 = let %9
-    %11:f32 = convert %x_40
-    %x_41:f32 = let %11
-    %13:vec4<f32> = construct %x_41, 0.0f, 0.0f, 0.0f
-    %14:vec4<f32> = let %13
-    %15:vec4<f32> = construct 0.0f, %x_41, 0.0f, 0.0f
-    %16:vec4<f32> = let %15
-    %17:vec4<f32> = construct 0.0f, 0.0f, %x_41, 0.0f
-    %18:vec4<f32> = let %17
-    %19:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_41
-    %20:mat4x4<f32> = construct %14, %16, %18, %19
-    store %m0, %20
-    %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %22:i32 = load %21
-    %x_48:i32 = let %22
-    store %c, %x_48
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %24:i32 = load %c
-        %x_53:i32 = let %24
-        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
-        %27:i32 = load %26
-        %x_55:i32 = let %27
-        %29:bool = lt %x_53, %x_55
-        if %29 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %30:mat4x4<f32> = load %m0
-        %x_58:mat4x4<f32> = let %30
-        store %m1, %x_58
-        %32:i32 = load %c
-        %x_59:i32 = let %32
-        %34:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %35:i32 = load %34
-        %x_61:i32 = let %35
-        %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %38:i32 = load %37
-        %x_64:i32 = let %38
-        %40:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %41:f32 = load %40
-        %x_66:f32 = let %41
-        %43:i32 = call %tint_mod_i32, %x_59, %x_61
-        %45:ptr<function, vec4<f32>, read_write> = access %m1, %43
-        store_vector_element %45, %x_64, %x_66
-        %46:i32 = load %c
-        %x_68:i32 = let %46
-        %48:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
-        %49:i32 = load %48
-        %x_70:i32 = let %49
-        %51:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %52:i32 = load %51
-        %x_73:i32 = let %52
-        %54:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
-        %55:f32 = load %54
-        %x_75:f32 = let %55
-        %57:i32 = call %tint_mod_i32, %x_68, %x_70
-        %58:ptr<function, vec4<f32>, read_write> = access %m0, %57
-        store_vector_element %58, %x_73, %x_75
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %59:i32 = load %c
-        %x_77:i32 = let %59
-        %61:i32 = add %x_77, 1i
-        store %c, %61
-        next_iteration  # -> $B3
-      }
-    }
-    %62:mat4x4<f32> = load %m0
-    %x_79:mat4x4<f32> = let %62
-    %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %65:i32 = load %64
-    %x_81:i32 = let %65
-    %67:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %68:i32 = load %67
-    %x_84:i32 = let %68
-    %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %71:i32 = load %70
-    %x_87:i32 = let %71
-    %73:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %74:i32 = load %73
-    %x_90:i32 = let %74
-    %76:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %77:i32 = load %76
-    %x_93:i32 = let %77
-    %79:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %80:i32 = load %79
-    %x_96:i32 = let %80
-    %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %83:i32 = load %82
-    %x_99:i32 = let %83
-    %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %86:i32 = load %85
-    %x_102:i32 = let %86
-    %88:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %89:i32 = load %88
-    %x_105:i32 = let %89
-    %91:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %92:i32 = load %91
-    %x_108:i32 = let %92
-    %94:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %95:i32 = load %94
-    %x_111:i32 = let %95
-    %97:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %98:i32 = load %97
-    %x_114:i32 = let %98
-    %100:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %101:i32 = load %100
-    %x_117:i32 = let %101
-    %103:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-    %104:i32 = load %103
-    %x_120:i32 = let %104
-    %106:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %107:i32 = load %106
-    %x_123:i32 = let %107
-    %109:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-    %110:i32 = load %109
-    %x_126:i32 = let %110
-    %112:f32 = convert %x_81
-    %113:f32 = let %112
-    %114:f32 = convert %x_84
-    %115:f32 = let %114
-    %116:f32 = convert %x_87
-    %117:f32 = let %116
-    %118:f32 = convert %x_90
-    %119:vec4<f32> = construct %113, %115, %117, %118
-    %120:vec4<f32> = let %119
-    %121:f32 = convert %x_93
-    %122:f32 = let %121
-    %123:f32 = convert %x_96
-    %124:f32 = let %123
-    %125:f32 = convert %x_99
-    %126:f32 = let %125
-    %127:f32 = convert %x_102
-    %128:vec4<f32> = construct %122, %124, %126, %127
-    %129:vec4<f32> = let %128
-    %130:f32 = convert %x_105
-    %131:f32 = let %130
-    %132:f32 = convert %x_108
-    %133:f32 = let %132
-    %134:f32 = convert %x_111
-    %135:f32 = let %134
-    %136:f32 = convert %x_114
-    %137:vec4<f32> = construct %131, %133, %135, %136
-    %138:vec4<f32> = let %137
-    %139:f32 = convert %x_117
-    %140:f32 = let %139
-    %141:f32 = convert %x_120
-    %142:f32 = let %141
-    %143:f32 = convert %x_123
-    %144:f32 = let %143
-    %145:f32 = convert %x_126
-    %146:vec4<f32> = construct %140, %142, %144, %145
-    %147:mat4x4<f32> = construct %120, %129, %138, %146
-    %x_132:mat4x4<f32> = let %147
-    %149:vec4<f32> = access %x_79, 0u
-    %150:vec4<f32> = access %x_132, 0u
-    %151:vec4<bool> = eq %149, %150
-    %152:bool = all %151
-    %153:bool = let %152
-    %154:vec4<f32> = access %x_79, 1u
-    %155:vec4<f32> = access %x_132, 1u
-    %156:vec4<bool> = eq %154, %155
-    %157:bool = all %156
-    %158:bool = and %153, %157
-    %159:bool = let %158
-    %160:vec4<f32> = access %x_79, 2u
-    %161:vec4<f32> = access %x_132, 2u
-    %162:vec4<bool> = eq %160, %161
-    %163:bool = all %162
-    %164:bool = and %159, %163
-    %165:bool = let %164
-    %166:vec4<f32> = access %x_79, 3u
-    %167:vec4<f32> = access %x_132, 3u
-    %168:vec4<bool> = eq %166, %167
-    %169:bool = all %168
-    %170:bool = and %165, %169
-    if %170 [t: $B7, f: $B8] {  # if_2
-      $B7: {  # true
-        %171:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %172:i32 = load %171
-        %x_156:i32 = let %172
-        %174:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %175:i32 = load %174
-        %x_159:i32 = let %175
-        %177:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %178:i32 = load %177
-        %x_162:i32 = let %178
-        %180:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
-        %181:i32 = load %180
-        %x_165:i32 = let %181
-        %183:f32 = convert %x_156
-        %184:f32 = let %183
-        %185:f32 = convert %x_159
-        %186:f32 = let %185
-        %187:f32 = convert %x_162
-        %188:f32 = let %187
-        %189:f32 = convert %x_165
-        %190:vec4<f32> = construct %184, %186, %188, %189
-        store %x_GLF_color, %190
-        exit_if  # if_2
-      }
-      $B8: {  # false
-        %191:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
-        %192:i32 = load %191
-        %x_169:i32 = let %192
-        %194:f32 = convert %x_169
-        %x_170:f32 = let %194
-        %196:vec4<f32> = construct %x_170, %x_170, %x_170, %x_170
-        store %x_GLF_color, %196
-        exit_if  # if_2
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B9: {
-    %198:void = call %main_1
-    %199:vec4<f32> = load %x_GLF_color
-    %200:main_out = construct %199
-    ret %200
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B10: {
-    %203:bool = eq %rhs, 0i
-    %204:bool = eq %lhs, -2147483648i
-    %205:bool = eq %rhs, -1i
-    %206:bool = and %204, %205
-    %207:bool = or %203, %206
-    %208:i32 = select %rhs, 1i, %207
-    %209:i32 = let %208
-    %210:i32 = div %lhs, %209
-    %211:i32 = mul %210, %209
-    %212:i32 = sub %lhs, %211
-    ret %212
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index 96643b2..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,100 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %continue_execution:ptr<private, bool, read_write> = var, true
-}
-
-%main_1 = func():void {
-  $B2: {
-    %ll:ptr<function, i32, read_write> = var
-    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:i32 = call %tint_f32_to_i32, %6
-    %9:bool = lt %7, 2000i
-    if %9 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        store %ll, 0i
-        loop [b: $B5, c: $B6] {  # loop_1
-          $B5: {  # body
-            %10:f32 = load_vector_element %gl_FragCoord, 0u
-            %11:bool = lt %10, 0.0f
-            if %11 [t: $B7] {  # if_2
-              $B7: {  # true
-                store %continue_execution, false
-                exit_if  # if_2
-              }
-            }
-            %12:i32 = load %ll
-            %13:bool = gte %12, 5i
-            if %13 [t: $B8] {  # if_3
-              $B8: {  # true
-                exit_loop  # loop_1
-              }
-            }
-            continue  # -> $B6
-          }
-          $B6: {  # continuing
-            %14:i32 = load %ll
-            %15:i32 = add %14, 1i
-            store %ll, %15
-            next_iteration  # -> $B5
-          }
-        }
-        %16:f32 = load_vector_element %gl_FragCoord, 0u
-        %17:i32 = call %tint_f32_to_i32, %16
-        %18:bool = gte %17, 2000i
-        if %18 [t: $B9] {  # if_4
-          $B9: {  # true
-            store %continue_execution, false
-            exit_if  # if_4
-          }
-        }
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B10: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %21:void = call %main_1
-    %22:vec4<f32> = load %x_GLF_color
-    %23:main_out = construct %22
-    %24:bool = load %continue_execution
-    %25:bool = eq %24, false
-    if %25 [t: $B11] {  # if_5
-      $B11: {  # true
-        terminate_invocation
-      }
-    }
-    ret %23
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %27:i32 = convert %value
-    %28:bool = gte %value, -2147483648.0f
-    %29:i32 = select -2147483648i, %27, %28
-    %30:bool = lte %value, 2147483520.0f
-    %31:i32 = select 2147483647i, %29, %30
-    ret %31
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index d701592..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/discards-in-control-flow/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,105 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %continue_execution:ptr<private, bool, read_write> = var, true
-}
-
-%main_1 = func():void {
-  $B2: {
-    %ll:ptr<function, i32, read_write> = var
-    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_30:f32 = let %6
-    %8:i32 = call %tint_f32_to_i32, %x_30
-    %10:bool = lt %8, 2000i
-    if %10 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        store %ll, 0i
-        loop [b: $B5, c: $B6] {  # loop_1
-          $B5: {  # body
-            %11:f32 = load_vector_element %gl_FragCoord, 0u
-            %x_41:f32 = let %11
-            %13:bool = lt %x_41, 0.0f
-            if %13 [t: $B7] {  # if_2
-              $B7: {  # true
-                store %continue_execution, false
-                exit_if  # if_2
-              }
-            }
-            %14:i32 = load %ll
-            %x_6:i32 = let %14
-            %16:bool = gte %x_6, 5i
-            if %16 [t: $B8] {  # if_3
-              $B8: {  # true
-                exit_loop  # loop_1
-              }
-            }
-            continue  # -> $B6
-          }
-          $B6: {  # continuing
-            %17:i32 = load %ll
-            %x_7:i32 = let %17
-            %19:i32 = add %x_7, 1i
-            store %ll, %19
-            next_iteration  # -> $B5
-          }
-        }
-        %20:f32 = load_vector_element %gl_FragCoord, 0u
-        %x_49:f32 = let %20
-        %22:i32 = call %tint_f32_to_i32, %x_49
-        %23:bool = gte %22, 2000i
-        if %23 [t: $B9] {  # if_4
-          $B9: {  # true
-            store %continue_execution, false
-            exit_if  # if_4
-          }
-        }
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B10: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %26:void = call %main_1
-    %27:vec4<f32> = load %x_GLF_color
-    %28:main_out = construct %27
-    %29:bool = load %continue_execution
-    %30:bool = eq %29, false
-    if %30 [t: $B11] {  # if_5
-      $B11: {  # true
-        terminate_invocation
-      }
-    }
-    ret %28
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %32:i32 = convert %value
-    %33:bool = gte %value, -2147483648.0f
-    %34:i32 = select -2147483648i, %32, %33
-    %35:bool = lte %value, 2147483520.0f
-    %36:i32 = select 2147483647i, %34, %35
-    ret %36
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.ir.msl
deleted file mode 100644
index d7e5bf3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,300 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
-  one:f32 @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_68:ptr<function, bool, read_write> = var, false
-    %x_29:ptr<function, i32, read_write> = var
-    %x_30:ptr<function, i32, read_write> = var
-    %x_31:ptr<function, i32, read_write> = var
-    %globalNumbers:ptr<function, array<i32, 10>, read_write> = var
-    %x_17:ptr<function, i32, read_write> = var
-    %acc:ptr<function, i32, read_write> = var
-    %i_1:ptr<function, i32, read_write> = var
-    %localNumbers:ptr<function, array<i32, 2>, read_write> = var
-    %param:ptr<function, i32, read_write> = var
-    %x_24:ptr<function, i32, read_write> = var
-    %x_23:ptr<function, i32, read_write> = var
-    store %acc, 0i
-    store %i_1, 0i
-    store %x_24, 0i
-    store %x_23, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_76:ptr<function, bool, read_write> = var
-        %x_33:ptr<function, i32, read_write> = var
-        %x_92:ptr<function, i32, read_write> = var
-        %x_34:ptr<function, i32, read_write> = var
-        %x_25:ptr<function, i32, read_write> = var
-        %x_16:ptr<function, i32, read_write> = var
-        %22:i32 = load %x_23
-        %23:bool = lt %22, 4i
-        if %23 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        store %x_68, false
-        store %x_76, false
-        loop [b: $B7] {  # loop_2
-          $B7: {  # body
-            %x_81:ptr<function, bool, read_write> = var
-            %x_32:ptr<function, i32, read_write> = var
-            %x_90:ptr<function, bool, read_write> = var
-            store %x_30, 0i
-            %27:bool = load %x_76
-            store %x_81, %27
-            store %x_32, 0i
-            loop [b: $B8] {  # loop_3
-              $B8: {  # body
-                %28:ptr<uniform, f32, read> = access %x_8, 0u
-                %29:f32 = load %28
-                %x_86:f32 = let %29
-                store %x_33, 0i
-                %31:bool = load %x_81
-                store %x_90, %31
-                %32:i32 = load %x_32
-                %33:i32 = let %32
-                %34:i32 = call %tint_f32_to_i32, %x_86
-                %36:bool = lt %33, %34
-                if %36 [t: $B9, f: $B10] {  # if_2
-                  $B9: {  # true
-                    exit_if  # if_2
-                  }
-                  $B10: {  # false
-                    exit_loop  # loop_3
-                  }
-                }
-                store %x_68, true
-                %37:i32 = load %x_32
-                store %x_29, %37
-                %38:i32 = load %x_32
-                store %x_33, %38
-                store %x_90, true
-                exit_loop  # loop_3
-              }
-            }
-            %39:i32 = load %x_33
-            store %x_34, %39
-            %40:bool = load %x_90
-            if %40 [t: $B11] {  # if_3
-              $B11: {  # true
-                exit_loop  # loop_2
-              }
-            }
-            store %x_92, 0i
-            store %x_68, true
-            %41:i32 = load %x_92
-            store %x_29, %41
-            %42:i32 = load %x_92
-            store %x_34, %42
-            exit_loop  # loop_2
-          }
-        }
-        %43:i32 = load %x_34
-        store %x_31, %43
-        %44:i32 = load %x_31
-        %x_93:i32 = let %44
-        %46:array<i32, 2> = load %localNumbers
-        %x_21:array<i32, 2> = let %46
-        %x_22_1:ptr<function, array<i32, 2>, read_write> = var, %x_21
-        %49:ptr<function, i32, read_write> = access %x_22_1, 1u
-        store %49, %x_93
-        %50:array<i32, 2> = load %x_22_1
-        %x_22:array<i32, 2> = let %50
-        %52:array<i32, 2> = load %x_22_1
-        store %localNumbers, %52
-        %53:ptr<function, i32, read_write> = access %globalNumbers, 0i
-        store %53, 0i
-        %54:i32 = access %x_22, 1u
-        %x_13:i32 = let %54
-        store %param, %x_13
-        store %x_17, 0i
-        store %x_25, 0i
-        loop [b: $B12, c: $B13] {  # loop_4
-          $B12: {  # body
-            %x_19:ptr<function, i32, read_write> = var
-            %57:i32 = load %x_25
-            %58:bool = lte %57, %x_13
-            if %58 [t: $B14, f: $B15] {  # if_4
-              $B14: {  # true
-                exit_if  # if_4
-              }
-              $B15: {  # false
-                exit_loop  # loop_4
-              }
-            }
-            %x_102_save:i32 = let %x_13
-            %60:ptr<function, i32, read_write> = access %globalNumbers, %x_13
-            %61:i32 = load %60
-            %62:bool = lte %61, 1i
-            if %62 [t: $B16] {  # if_5
-              $B16: {  # true
-                %63:ptr<function, i32, read_write> = access %globalNumbers, %x_102_save
-                store %63, 1i
-                exit_if  # if_5
-              }
-            }
-            continue  # -> $B13
-          }
-          $B13: {  # continuing
-            %64:i32 = load %x_25
-            %65:i32 = add %64, 1i
-            store %x_19, %65
-            %66:i32 = load %x_19
-            store %x_17, %66
-            %67:i32 = load %x_19
-            store %x_25, %67
-            next_iteration  # -> $B12
-          }
-        }
-        %68:i32 = load %x_24
-        %69:i32 = let %68
-        %70:ptr<uniform, f32, read> = access %x_8, 0u
-        %71:f32 = load %70
-        %72:i32 = call %tint_f32_to_i32, %71
-        %73:i32 = sub %72, 1i
-        %74:ptr<function, i32, read_write> = access %globalNumbers, %73
-        %75:i32 = load %74
-        %76:i32 = add %69, %75
-        %x_15:i32 = let %76
-        store %acc, %x_15
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %78:i32 = load %x_23
-        %79:i32 = add %78, 1i
-        store %x_16, %79
-        %80:i32 = load %x_16
-        store %i_1, %80
-        store %x_24, %x_15
-        %81:i32 = load %x_16
-        store %x_23, %81
-        next_iteration  # -> $B3
-      }
-    }
-    %82:i32 = load %x_24
-    %83:bool = eq %82, 4i
-    if %83 [t: $B17, f: $B18] {  # if_6
-      $B17: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_6
-      }
-      $B18: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_6
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B19: {
-    %85:void = call %main_1
-    %86:vec4<f32> = load %x_GLF_color
-    %87:main_out = construct %86
-    ret %87
-  }
-}
-%yieldsZero_ = func():i32 {
-  $B20: {
-    %x_116:ptr<function, bool, read_write> = var, false
-    %x_20:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %x_118:ptr<function, bool, read_write> = var
-    %x_26:ptr<function, i32, read_write> = var
-    %x_134:ptr<function, i32, read_write> = var
-    %x_27:ptr<function, i32, read_write> = var
-    store %x_118, false
-    loop [b: $B21] {  # loop_5
-      $B21: {  # body
-        %x_123:ptr<function, bool, read_write> = var
-        %x_28:ptr<function, i32, read_write> = var
-        %x_132:ptr<function, bool, read_write> = var
-        store %i, 0i
-        %99:bool = load %x_118
-        store %x_123, %99
-        store %x_28, 0i
-        loop [b: $B22] {  # loop_6
-          $B22: {  # body
-            %100:ptr<uniform, f32, read> = access %x_8, 0u
-            %101:f32 = load %100
-            %x_128:f32 = let %101
-            store %x_26, 0i
-            %103:bool = load %x_123
-            store %x_132, %103
-            %104:i32 = load %x_28
-            %105:i32 = let %104
-            %106:i32 = call %tint_f32_to_i32, %x_128
-            %107:bool = lt %105, %106
-            if %107 [t: $B23, f: $B24] {  # if_7
-              $B23: {  # true
-                exit_if  # if_7
-              }
-              $B24: {  # false
-                exit_loop  # loop_6
-              }
-            }
-            store %x_116, true
-            %108:i32 = load %x_28
-            store %x_20, %108
-            %109:i32 = load %x_28
-            store %x_26, %109
-            store %x_132, true
-            exit_loop  # loop_6
-          }
-        }
-        %110:i32 = load %x_26
-        store %x_27, %110
-        %111:bool = load %x_132
-        if %111 [t: $B25] {  # if_8
-          $B25: {  # true
-            exit_loop  # loop_5
-          }
-        }
-        store %x_134, 0i
-        store %x_116, true
-        %112:i32 = load %x_134
-        store %x_20, %112
-        %113:i32 = load %x_134
-        store %x_27, %113
-        exit_loop  # loop_5
-      }
-    }
-    %114:i32 = load %x_27
-    ret %114
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B26: {
-    %116:i32 = convert %value
-    %117:bool = gte %value, -2147483648.0f
-    %118:i32 = select -2147483648i, %116, %117
-    %119:bool = lte %value, 2147483520.0f
-    %120:i32 = select 2147483647i, %118, %119
-    ret %120
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.ir.msl
deleted file mode 100644
index e75a419..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/global-array-loops/0-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,325 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
-  one:f32 @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_68:ptr<function, bool, read_write> = var, false
-    %x_29:ptr<function, i32, read_write> = var
-    %x_30:ptr<function, i32, read_write> = var
-    %x_31:ptr<function, i32, read_write> = var
-    %globalNumbers:ptr<function, array<i32, 10>, read_write> = var
-    %x_17:ptr<function, i32, read_write> = var
-    %acc:ptr<function, i32, read_write> = var
-    %i_1:ptr<function, i32, read_write> = var
-    %localNumbers:ptr<function, array<i32, 2>, read_write> = var
-    %param:ptr<function, i32, read_write> = var
-    %x_24:ptr<function, i32, read_write> = var
-    %x_24_phi:ptr<function, i32, read_write> = var
-    %x_23_phi:ptr<function, i32, read_write> = var
-    store %acc, 0i
-    store %i_1, 0i
-    store %x_24_phi, 0i
-    store %x_23_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_33:ptr<function, i32, read_write> = var
-        %x_92:ptr<function, i32, read_write> = var
-        %x_76_phi:ptr<function, bool, read_write> = var
-        %x_34_phi:ptr<function, i32, read_write> = var
-        %x_25_phi:ptr<function, i32, read_write> = var
-        %22:i32 = load %x_24_phi
-        store %x_24, %22
-        %23:i32 = load %x_23_phi
-        %x_23:i32 = let %23
-        %25:bool = lt %x_23, 4i
-        if %25 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        store %x_68, false
-        store %x_76_phi, false
-        loop [b: $B7] {  # loop_2
-          $B7: {  # body
-            %x_81:ptr<function, bool, read_write> = var
-            %x_32:ptr<function, i32, read_write> = var
-            %x_81_phi:ptr<function, bool, read_write> = var
-            %x_32_phi:ptr<function, i32, read_write> = var
-            %x_33_phi:ptr<function, i32, read_write> = var
-            %x_90_phi:ptr<function, bool, read_write> = var
-            %32:bool = load %x_76_phi
-            %x_76:bool = let %32
-            store %x_30, 0i
-            store %x_81_phi, %x_76
-            store %x_32_phi, 0i
-            loop [b: $B8] {  # loop_3
-              $B8: {  # body
-                %34:bool = load %x_81_phi
-                store %x_81, %34
-                %35:i32 = load %x_32_phi
-                store %x_32, %35
-                %36:ptr<uniform, f32, read> = access %x_8, 0u
-                %37:f32 = load %36
-                %x_86:f32 = let %37
-                store %x_33_phi, 0i
-                %39:bool = load %x_81
-                store %x_90_phi, %39
-                %40:i32 = load %x_32
-                %41:i32 = let %40
-                %42:i32 = call %tint_f32_to_i32, %x_86
-                %44:bool = lt %41, %42
-                if %44 [t: $B9, f: $B10] {  # if_2
-                  $B9: {  # true
-                    exit_if  # if_2
-                  }
-                  $B10: {  # false
-                    exit_loop  # loop_3
-                  }
-                }
-                store %x_68, true
-                %45:i32 = load %x_32
-                store %x_29, %45
-                %46:i32 = load %x_32
-                store %x_33_phi, %46
-                store %x_90_phi, true
-                exit_loop  # loop_3
-              }
-            }
-            %47:i32 = load %x_33_phi
-            store %x_33, %47
-            %48:bool = load %x_90_phi
-            %x_90:bool = let %48
-            %50:i32 = load %x_33
-            store %x_34_phi, %50
-            if %x_90 [t: $B11] {  # if_3
-              $B11: {  # true
-                exit_loop  # loop_2
-              }
-            }
-            store %x_92, 0i
-            store %x_68, true
-            %51:i32 = load %x_92
-            store %x_29, %51
-            %52:i32 = load %x_92
-            store %x_34_phi, %52
-            exit_loop  # loop_2
-          }
-        }
-        %53:i32 = load %x_34_phi
-        %x_34:i32 = let %53
-        store %x_31, %x_34
-        %55:i32 = load %x_31
-        %x_93:i32 = let %55
-        %57:array<i32, 2> = load %localNumbers
-        %x_21:array<i32, 2> = let %57
-        %x_22_1:ptr<function, array<i32, 2>, read_write> = var, %x_21
-        %60:ptr<function, i32, read_write> = access %x_22_1, 1u
-        store %60, %x_93
-        %61:array<i32, 2> = load %x_22_1
-        %x_22:array<i32, 2> = let %61
-        store %localNumbers, %x_22
-        %63:ptr<function, i32, read_write> = access %globalNumbers, 0i
-        store %63, 0i
-        %64:i32 = access %x_22, 1u
-        %x_13:i32 = let %64
-        store %param, %x_13
-        store %x_17, 0i
-        store %x_25_phi, 0i
-        loop [b: $B12, c: $B13] {  # loop_4
-          $B12: {  # body
-            %66:i32 = load %x_25_phi
-            %x_25:i32 = let %66
-            %68:bool = lte %x_25, %x_13
-            if %68 [t: $B14, f: $B15] {  # if_4
-              $B14: {  # true
-                exit_if  # if_4
-              }
-              $B15: {  # false
-                exit_loop  # loop_4
-              }
-            }
-            %x_102_save:i32 = let %x_13
-            %70:ptr<function, i32, read_write> = access %globalNumbers, %x_102_save
-            %71:i32 = load %70
-            %x_18:i32 = let %71
-            %73:bool = lte %x_18, 1i
-            if %73 [t: $B16] {  # if_5
-              $B16: {  # true
-                %74:ptr<function, i32, read_write> = access %globalNumbers, %x_102_save
-                store %74, 1i
-                exit_if  # if_5
-              }
-            }
-            continue  # -> $B13
-          }
-          $B13: {  # continuing
-            %75:i32 = add %x_25, 1i
-            %x_19:i32 = let %75
-            store %x_17, %x_19
-            store %x_25_phi, %x_19
-            next_iteration  # -> $B12
-          }
-        }
-        %77:ptr<uniform, f32, read> = access %x_8, 0u
-        %78:f32 = load %77
-        %x_107:f32 = let %78
-        %80:i32 = call %tint_f32_to_i32, %x_107
-        %81:i32 = sub %80, 1i
-        %82:ptr<function, i32, read_write> = access %globalNumbers, %81
-        %83:i32 = load %82
-        %x_14:i32 = let %83
-        %85:i32 = load %x_24
-        %86:i32 = let %85
-        %87:i32 = bitcast %x_14
-        %88:i32 = add %86, %87
-        %89:i32 = bitcast %88
-        %x_15:i32 = let %89
-        store %acc, %x_15
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %91:i32 = add %x_23, 1i
-        %x_16:i32 = let %91
-        store %i_1, %x_16
-        store %x_24_phi, %x_15
-        store %x_23_phi, %x_16
-        next_iteration  # -> $B3
-      }
-    }
-    %93:i32 = load %x_24
-    %94:bool = eq %93, 4i
-    if %94 [t: $B17, f: $B18] {  # if_6
-      $B17: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_6
-      }
-      $B18: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_6
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B19: {
-    %96:void = call %main_1
-    %97:vec4<f32> = load %x_GLF_color
-    %98:main_out = construct %97
-    ret %98
-  }
-}
-%yieldsZero_ = func():i32 {
-  $B20: {
-    %x_116:ptr<function, bool, read_write> = var, false
-    %x_20:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %x_26:ptr<function, i32, read_write> = var
-    %x_134:ptr<function, i32, read_write> = var
-    %x_118_phi:ptr<function, bool, read_write> = var
-    %x_27_phi:ptr<function, i32, read_write> = var
-    store %x_118_phi, false
-    loop [b: $B21] {  # loop_5
-      $B21: {  # body
-        %x_123:ptr<function, bool, read_write> = var
-        %x_28:ptr<function, i32, read_write> = var
-        %x_123_phi:ptr<function, bool, read_write> = var
-        %x_28_phi:ptr<function, i32, read_write> = var
-        %x_26_phi:ptr<function, i32, read_write> = var
-        %x_132_phi:ptr<function, bool, read_write> = var
-        %113:bool = load %x_118_phi
-        %x_118:bool = let %113
-        store %i, 0i
-        store %x_123_phi, %x_118
-        store %x_28_phi, 0i
-        loop [b: $B22] {  # loop_6
-          $B22: {  # body
-            %115:bool = load %x_123_phi
-            store %x_123, %115
-            %116:i32 = load %x_28_phi
-            store %x_28, %116
-            %117:ptr<uniform, f32, read> = access %x_8, 0u
-            %118:f32 = load %117
-            %x_128:f32 = let %118
-            store %x_26_phi, 0i
-            %120:bool = load %x_123
-            store %x_132_phi, %120
-            %121:i32 = load %x_28
-            %122:i32 = let %121
-            %123:i32 = call %tint_f32_to_i32, %x_128
-            %124:bool = lt %122, %123
-            if %124 [t: $B23, f: $B24] {  # if_7
-              $B23: {  # true
-                exit_if  # if_7
-              }
-              $B24: {  # false
-                exit_loop  # loop_6
-              }
-            }
-            store %x_116, true
-            %125:i32 = load %x_28
-            store %x_20, %125
-            %126:i32 = load %x_28
-            store %x_26_phi, %126
-            store %x_132_phi, true
-            exit_loop  # loop_6
-          }
-        }
-        %127:i32 = load %x_26_phi
-        store %x_26, %127
-        %128:bool = load %x_132_phi
-        %x_132:bool = let %128
-        %130:i32 = load %x_26
-        store %x_27_phi, %130
-        if %x_132 [t: $B25] {  # if_8
-          $B25: {  # true
-            exit_loop  # loop_5
-          }
-        }
-        store %x_134, 0i
-        store %x_116, true
-        %131:i32 = load %x_134
-        store %x_20, %131
-        %132:i32 = load %x_134
-        store %x_27_phi, %132
-        exit_loop  # loop_5
-      }
-    }
-    %133:i32 = load %x_27_phi
-    %x_27:i32 = let %133
-    ret %x_27
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B26: {
-    %136:i32 = convert %value
-    %137:bool = gte %value, -2147483648.0f
-    %138:i32 = select -2147483648i, %136, %137
-    %139:bool = lte %value, 2147483520.0f
-    %140:i32 = select 2147483647i, %138, %139
-    ret %140
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.ir.msl
deleted file mode 100644
index 0a9d5ab..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,136 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_66:ptr<function, i32, read_write> = var
-    %x_69:ptr<function, i32, read_write> = var
-    %8:vec4<f32> = load %gl_FragCoord
-    %9:vec2<f32> = swizzle %8, xy
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = div %9, %11
-    %x_56:vec2<f32> = let %12
-    %14:f32 = access %x_56, 0u
-    %15:f32 = mul %14, 10.0f
-    %16:i32 = call %tint_f32_to_i32, %15
-    %18:i32 = let %16
-    %19:f32 = access %x_56, 1u
-    %20:f32 = mul %19, 10.0f
-    %21:i32 = call %tint_f32_to_i32, %20
-    %22:i32 = mul %21, 10i
-    %23:i32 = add %18, %22
-    %x_64:i32 = let %23
-    store %x_66, 100i
-    store %x_69, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_67:ptr<function, i32, read_write> = var
-        %x_70:ptr<function, i32, read_write> = var
-        %27:i32 = load %x_69
-        %28:bool = lt %27, %x_64
-        if %28 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %29:i32 = load %x_66
-        %30:i32 = mul 4i, %29
-        %31:i32 = load %x_66
-        %32:i32 = sub 1000i, %31
-        %33:i32 = mul %30, %32
-        %34:i32 = call %tint_div_i32, %33, 1000i
-        store %x_67, %34
-        %36:i32 = load %x_69
-        %37:i32 = add %36, 1i
-        store %x_70, %37
-        %38:i32 = load %x_67
-        store %x_66, %38
-        %39:i32 = load %x_70
-        store %x_69, %39
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %40:i32 = load %x_66
-    %41:i32 = call %tint_mod_i32, %40, 16i
-    %43:ptr<function, vec4<f32>, read_write> = access %indexable, %41
-    %44:vec4<f32> = load %43
-    store %x_GLF_color, %44
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %47:void = call %main_1
-    %48:vec4<f32> = load %x_GLF_color
-    %49:main_out = construct %48
-    ret %49
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %52:bool = eq %rhs, 0i
-    %53:bool = eq %lhs, -2147483648i
-    %54:bool = eq %rhs, -1i
-    %55:bool = and %53, %54
-    %56:bool = or %52, %55
-    %57:i32 = select %rhs, 1i, %56
-    %58:i32 = div %lhs, %57
-    ret %58
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %61:bool = eq %rhs_1, 0i
-    %62:bool = eq %lhs_1, -2147483648i
-    %63:bool = eq %rhs_1, -1i
-    %64:bool = and %62, %63
-    %65:bool = or %61, %64
-    %66:i32 = select %rhs_1, 1i, %65
-    %67:i32 = let %66
-    %68:i32 = div %lhs_1, %67
-    %69:i32 = mul %68, %67
-    %70:i32 = sub %lhs_1, %69
-    ret %70
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %72:i32 = convert %value
-    %73:bool = gte %value, -2147483648.0f
-    %74:i32 = select -2147483648i, %72, %73
-    %75:bool = lte %value, 2147483520.0f
-    %76:i32 = select 2147483647i, %74, %75
-    ret %76
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.ir.msl
deleted file mode 100644
index 761f161..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,148 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_66:ptr<function, i32, read_write> = var
-    %x_66_phi:ptr<function, i32, read_write> = var
-    %x_69_phi:ptr<function, i32, read_write> = var
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_52:vec4<f32> = let %9
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %12:vec2<f32> = load %11
-    %x_55:vec2<f32> = let %12
-    %14:f32 = access %x_52, 0u
-    %15:f32 = access %x_52, 1u
-    %16:vec2<f32> = construct %14, %15
-    %17:vec2<f32> = div %16, %x_55
-    %x_56:vec2<f32> = let %17
-    %19:f32 = access %x_56, 0u
-    %20:f32 = mul %19, 10.0f
-    %21:i32 = call %tint_f32_to_i32, %20
-    %23:i32 = let %21
-    %24:f32 = access %x_56, 1u
-    %25:f32 = mul %24, 10.0f
-    %26:i32 = call %tint_f32_to_i32, %25
-    %27:i32 = mul %26, 10i
-    %28:i32 = add %23, %27
-    %x_64:i32 = let %28
-    store %x_66_phi, 100i
-    store %x_69_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_67:ptr<function, i32, read_write> = var
-        %x_70:ptr<function, i32, read_write> = var
-        %32:i32 = load %x_66_phi
-        store %x_66, %32
-        %33:i32 = load %x_69_phi
-        %x_69:i32 = let %33
-        %35:bool = lt %x_69, %x_64
-        if %35 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %36:i32 = load %x_66
-        %37:i32 = bitcast %36
-        %38:i32 = mul 4i, %37
-        %39:i32 = let %38
-        %40:i32 = load %x_66
-        %41:i32 = bitcast %40
-        %42:i32 = sub 1000i, %41
-        %43:i32 = mul %39, %42
-        %44:i32 = call %tint_div_i32, %43, 1000i
-        store %x_67, %44
-        %46:i32 = add %x_69, 1i
-        store %x_70, %46
-        %47:i32 = load %x_67
-        store %x_66_phi, %47
-        %48:i32 = load %x_70
-        store %x_69_phi, %48
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %49:i32 = load %x_66
-    %50:i32 = call %tint_mod_i32, %49, 16i
-    %52:i32 = bitcast %50
-    %53:ptr<function, vec4<f32>, read_write> = access %indexable, %52
-    %54:vec4<f32> = load %53
-    %x_78:vec4<f32> = let %54
-    store %x_GLF_color, %x_78
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %58:void = call %main_1
-    %59:vec4<f32> = load %x_GLF_color
-    %60:main_out = construct %59
-    ret %60
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %63:bool = eq %rhs, 0i
-    %64:bool = eq %lhs, -2147483648i
-    %65:bool = eq %rhs, -1i
-    %66:bool = and %64, %65
-    %67:bool = or %63, %66
-    %68:i32 = select %rhs, 1i, %67
-    %69:i32 = div %lhs, %68
-    ret %69
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %72:bool = eq %rhs_1, 0i
-    %73:bool = eq %lhs_1, -2147483648i
-    %74:bool = eq %rhs_1, -1i
-    %75:bool = and %73, %74
-    %76:bool = or %72, %75
-    %77:i32 = select %rhs_1, 1i, %76
-    %78:i32 = let %77
-    %79:i32 = div %lhs_1, %78
-    %80:i32 = mul %79, %78
-    %81:i32 = sub %lhs_1, %80
-    ret %81
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %83:i32 = convert %value
-    %84:bool = gte %value, -2147483648.0f
-    %85:i32 = select -2147483648i, %83, %84
-    %86:bool = lte %value, 2147483520.0f
-    %87:i32 = select 2147483647i, %85, %86
-    ret %87
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.ir.msl
deleted file mode 100644
index 318ce84..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,141 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_72:ptr<function, i32, read_write> = var
-    %x_75:ptr<function, i32, read_write> = var
-    %8:vec4<f32> = load %gl_FragCoord
-    %9:vec2<f32> = swizzle %8, xy
-    %x_55:vec2<f32> = let %9
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %12:vec2<f32> = load %11
-    %13:vec2<f32> = div %x_55, %12
-    %x_59:vec2<f32> = let %13
-    %15:f32 = access %x_59, 0u
-    %16:vec4<f32> = construct 0.0f, %x_55, 0.5f
-    %17:f32 = access %16, 3u
-    %18:vec4<f32> = construct %17, 10.0f, vec2<f32>(0.0f)
-    %19:f32 = access %18, 1u
-    %20:f32 = mul %15, %19
-    %21:i32 = call %tint_f32_to_i32, %20
-    %23:i32 = let %21
-    %24:f32 = access %x_59, 1u
-    %25:f32 = mul %24, 10.0f
-    %26:i32 = call %tint_f32_to_i32, %25
-    %27:i32 = mul %26, 10i
-    %28:i32 = add %23, %27
-    %x_70:i32 = let %28
-    store %x_72, 100i
-    store %x_75, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_73:ptr<function, i32, read_write> = var
-        %x_76:ptr<function, i32, read_write> = var
-        %32:i32 = load %x_75
-        %33:bool = lt %32, %x_70
-        if %33 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %34:i32 = load %x_72
-        %35:i32 = mul 4i, %34
-        %36:i32 = load %x_72
-        %37:i32 = sub 1000i, %36
-        %38:i32 = mul %35, %37
-        %39:i32 = call %tint_div_i32, %38, 1000i
-        store %x_73, %39
-        %41:i32 = load %x_75
-        %42:i32 = add %41, 1i
-        store %x_76, %42
-        %43:i32 = load %x_73
-        store %x_72, %43
-        %44:i32 = load %x_76
-        store %x_75, %44
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %45:i32 = load %x_72
-    %46:i32 = call %tint_mod_i32, %45, 16i
-    %48:ptr<function, vec4<f32>, read_write> = access %indexable, %46
-    %49:vec4<f32> = load %48
-    store %x_GLF_color, %49
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %57:bool = eq %rhs, 0i
-    %58:bool = eq %lhs, -2147483648i
-    %59:bool = eq %rhs, -1i
-    %60:bool = and %58, %59
-    %61:bool = or %57, %60
-    %62:i32 = select %rhs, 1i, %61
-    %63:i32 = div %lhs, %62
-    ret %63
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %66:bool = eq %rhs_1, 0i
-    %67:bool = eq %lhs_1, -2147483648i
-    %68:bool = eq %rhs_1, -1i
-    %69:bool = and %67, %68
-    %70:bool = or %66, %69
-    %71:i32 = select %rhs_1, 1i, %70
-    %72:i32 = let %71
-    %73:i32 = div %lhs_1, %72
-    %74:i32 = mul %73, %72
-    %75:i32 = sub %lhs_1, %74
-    ret %75
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %77:i32 = convert %value
-    %78:bool = gte %value, -2147483648.0f
-    %79:i32 = select -2147483648i, %77, %78
-    %80:bool = lte %value, 2147483520.0f
-    %81:i32 = select 2147483647i, %79, %80
-    ret %81
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.ir.msl
deleted file mode 100644
index f211f6c..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-composite2/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,153 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_72:ptr<function, i32, read_write> = var
-    %x_72_phi:ptr<function, i32, read_write> = var
-    %x_75_phi:ptr<function, i32, read_write> = var
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_54:vec4<f32> = let %9
-    %11:f32 = access %x_54, 0u
-    %12:f32 = access %x_54, 1u
-    %13:vec2<f32> = construct %11, %12
-    %x_55:vec2<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_58:vec2<f32> = let %16
-    %18:vec2<f32> = div %x_55, %x_58
-    %x_59:vec2<f32> = let %18
-    %20:f32 = access %x_59, 0u
-    %21:vec4<f32> = construct 0.0f, %x_55, 0.5f
-    %22:f32 = access %21, 3u
-    %23:vec4<f32> = construct %22, 10.0f, vec2<f32>(0.0f)
-    %24:f32 = access %23, 1u
-    %25:f32 = mul %20, %24
-    %26:i32 = call %tint_f32_to_i32, %25
-    %28:i32 = let %26
-    %29:f32 = access %x_59, 1u
-    %30:f32 = mul %29, 10.0f
-    %31:i32 = call %tint_f32_to_i32, %30
-    %32:i32 = mul %31, 10i
-    %33:i32 = add %28, %32
-    %x_70:i32 = let %33
-    store %x_72_phi, 100i
-    store %x_75_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_73:ptr<function, i32, read_write> = var
-        %x_76:ptr<function, i32, read_write> = var
-        %37:i32 = load %x_72_phi
-        store %x_72, %37
-        %38:i32 = load %x_75_phi
-        %x_75:i32 = let %38
-        %40:bool = lt %x_75, %x_70
-        if %40 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %41:i32 = load %x_72
-        %42:i32 = bitcast %41
-        %43:i32 = mul 4i, %42
-        %44:i32 = let %43
-        %45:i32 = load %x_72
-        %46:i32 = bitcast %45
-        %47:i32 = sub 1000i, %46
-        %48:i32 = mul %44, %47
-        %49:i32 = call %tint_div_i32, %48, 1000i
-        store %x_73, %49
-        %51:i32 = add %x_75, 1i
-        store %x_76, %51
-        %52:i32 = load %x_73
-        store %x_72_phi, %52
-        %53:i32 = load %x_76
-        store %x_75_phi, %53
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %54:i32 = load %x_72
-    %55:i32 = call %tint_mod_i32, %54, 16i
-    %57:i32 = bitcast %55
-    %58:ptr<function, vec4<f32>, read_write> = access %indexable, %57
-    %59:vec4<f32> = load %58
-    %x_84:vec4<f32> = let %59
-    store %x_GLF_color, %x_84
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %63:void = call %main_1
-    %64:vec4<f32> = load %x_GLF_color
-    %65:main_out = construct %64
-    ret %65
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %68:bool = eq %rhs, 0i
-    %69:bool = eq %lhs, -2147483648i
-    %70:bool = eq %rhs, -1i
-    %71:bool = and %69, %70
-    %72:bool = or %68, %71
-    %73:i32 = select %rhs, 1i, %72
-    %74:i32 = div %lhs, %73
-    ret %74
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %77:bool = eq %rhs_1, 0i
-    %78:bool = eq %lhs_1, -2147483648i
-    %79:bool = eq %rhs_1, -1i
-    %80:bool = and %78, %79
-    %81:bool = or %77, %80
-    %82:i32 = select %rhs_1, 1i, %81
-    %83:i32 = let %82
-    %84:i32 = div %lhs_1, %83
-    %85:i32 = mul %84, %83
-    %86:i32 = sub %lhs_1, %85
-    ret %86
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %88:i32 = convert %value
-    %89:bool = gte %value, -2147483648.0f
-    %90:i32 = select -2147483648i, %88, %89
-    %91:bool = lte %value, 2147483520.0f
-    %92:i32 = select 2147483647i, %90, %91
-    ret %92
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.ir.msl
deleted file mode 100644
index 08020c7..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,195 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_77:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_78:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_79:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_80:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_89:ptr<function, vec4<f32>, read_write> = var
-    %x_92:ptr<function, i32, read_write> = var
-    %11:vec4<f32> = load %gl_FragCoord
-    %12:vec2<f32> = swizzle %11, xy
-    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %14:vec2<f32> = load %13
-    %15:vec2<f32> = div %12, %14
-    %16:vec2<f32> = mul %15, 32.0f
-    %17:vec2<f32> = floor %16
-    %x_87:vec2<f32> = let %17
-    store %x_89, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
-    store %x_92, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_121:ptr<function, bool, read_write> = var
-        %x_136:ptr<function, vec4<f32>, read_write> = var
-        %x_90:ptr<function, vec4<f32>, read_write> = var
-        %x_93:ptr<function, i32, read_write> = var
-        %23:i32 = load %x_92
-        %24:bool = lt %23, 8i
-        if %24 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %x_98:ptr<function, vec4<f32>, read_write> = var
-        store %x_77, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-        %26:i32 = load %x_92
-        %27:ptr<function, vec4<f32>, read_write> = access %x_77, %26
-        %28:vec4<f32> = load %27
-        store %x_98, %28
-        switch 0u [c: (default, $B7)] {  # switch_1
-          $B7: {  # case
-            %29:f32 = access %x_87, 0u
-            %x_101:f32 = let %29
-            %31:f32 = load_vector_element %x_98, 0u
-            %x_102:f32 = let %31
-            %33:bool = lt %x_101, %x_102
-            if %33 [t: $B8] {  # if_2
-              $B8: {  # true
-                store %x_121, false
-                exit_switch  # switch_1
-              }
-            }
-            %34:f32 = access %x_87, 1u
-            %x_106:f32 = let %34
-            %36:f32 = load_vector_element %x_98, 1u
-            %x_107:f32 = let %36
-            %38:bool = lt %x_106, %x_107
-            if %38 [t: $B9] {  # if_3
-              $B9: {  # true
-                store %x_121, false
-                exit_switch  # switch_1
-              }
-            }
-            %39:f32 = load_vector_element %x_98, 2u
-            %40:f32 = add %x_102, %39
-            %41:bool = gt %x_101, %40
-            if %41 [t: $B10] {  # if_4
-              $B10: {  # true
-                store %x_121, false
-                exit_switch  # switch_1
-              }
-            }
-            %42:f32 = load_vector_element %x_98, 3u
-            %43:f32 = add %x_107, %42
-            %44:bool = gt %x_106, %43
-            if %44 [t: $B11] {  # if_5
-              $B11: {  # true
-                store %x_121, false
-                exit_switch  # switch_1
-              }
-            }
-            store %x_121, true
-            exit_switch  # switch_1
-          }
-        }
-        %45:vec4<f32> = load %x_89
-        store %x_90, %45
-        %46:bool = load %x_121
-        if %46 [t: $B12] {  # if_6
-          $B12: {  # true
-            store %x_78, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %47:i32 = load %x_92
-            %48:ptr<function, vec4<f32>, read_write> = access %x_78, %47
-            %49:f32 = load_vector_element %48, 0u
-            %x_125:f32 = let %49
-            store %x_79, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %51:i32 = load %x_92
-            %52:ptr<function, vec4<f32>, read_write> = access %x_79, %51
-            %53:f32 = load_vector_element %52, 1u
-            %x_128:f32 = let %53
-            store %x_80, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %55:i32 = call %tint_f32_to_i32, %x_125
-            %57:i32 = let %55
-            %58:i32 = call %tint_f32_to_i32, %x_128
-            %59:i32 = mul %57, %58
-            %60:i32 = load %x_92
-            %61:i32 = mul %60, 9i
-            %62:i32 = add %59, %61
-            %63:i32 = add %62, 11i
-            %64:i32 = call %tint_mod_i32, %63, 16i
-            %66:ptr<function, vec4<f32>, read_write> = access %x_80, %64
-            %67:vec4<f32> = load %66
-            store %x_136, %67
-            %68:vec4<f32> = load %x_136
-            store %x_90, %68
-            exit_if  # if_6
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %69:i32 = load %x_92
-        %70:i32 = add %69, 1i
-        store %x_93, %70
-        %71:vec4<f32> = load %x_90
-        store %x_89, %71
-        %72:i32 = load %x_93
-        store %x_92, %72
-        next_iteration  # -> $B3
-      }
-    }
-    %73:vec4<f32> = load %x_89
-    store %x_GLF_color, %73
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B13: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %76:void = call %main_1
-    %77:vec4<f32> = load %x_GLF_color
-    %78:main_out = construct %77
-    ret %78
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B14: {
-    %81:bool = eq %rhs, 0i
-    %82:bool = eq %lhs, -2147483648i
-    %83:bool = eq %rhs, -1i
-    %84:bool = and %82, %83
-    %85:bool = or %81, %84
-    %86:i32 = select %rhs, 1i, %85
-    %87:i32 = let %86
-    %88:i32 = div %lhs, %87
-    %89:i32 = mul %88, %87
-    %90:i32 = sub %lhs, %89
-    ret %90
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %92:i32 = convert %value
-    %93:bool = gte %value, -2147483648.0f
-    %94:i32 = select -2147483648i, %92, %93
-    %95:bool = lte %value, 2147483520.0f
-    %96:i32 = select 2147483647i, %94, %95
-    ret %96
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.ir.msl
deleted file mode 100644
index 8854829..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-null-in-phi-and-unroll/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,200 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_77:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_78:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_79:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_80:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_89:ptr<function, vec4<f32>, read_write> = var
-    %x_89_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_92_phi:ptr<function, i32, read_write> = var
-    %12:vec4<f32> = load %gl_FragCoord
-    %x_81:vec4<f32> = let %12
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %15:vec2<f32> = load %14
-    %x_84:vec2<f32> = let %15
-    %17:f32 = access %x_81, 0u
-    %18:f32 = access %x_81, 1u
-    %19:vec2<f32> = construct %17, %18
-    %20:vec2<f32> = div %19, %x_84
-    %21:vec2<f32> = mul %20, 32.0f
-    %22:vec2<f32> = floor %21
-    %x_87:vec2<f32> = let %22
-    store %x_89_phi, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
-    store %x_92_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_136:ptr<function, vec4<f32>, read_write> = var
-        %x_93:ptr<function, i32, read_write> = var
-        %x_121_phi:ptr<function, bool, read_write> = var
-        %x_90_phi:ptr<function, vec4<f32>, read_write> = var
-        %28:vec4<f32> = load %x_89_phi
-        store %x_89, %28
-        %29:i32 = load %x_92_phi
-        %x_92:i32 = let %29
-        %31:bool = lt %x_92, 8i
-        if %31 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %x_98:ptr<function, vec4<f32>, read_write> = var
-        store %x_77, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-        %33:ptr<function, vec4<f32>, read_write> = access %x_77, %x_92
-        %34:vec4<f32> = load %33
-        store %x_98, %34
-        switch 0u [c: (default, $B7)] {  # switch_1
-          $B7: {  # case
-            %35:f32 = access %x_87, 0u
-            %x_101:f32 = let %35
-            %37:f32 = load_vector_element %x_98, 0u
-            %x_102:f32 = let %37
-            %39:bool = lt %x_101, %x_102
-            if %39 [t: $B8] {  # if_2
-              $B8: {  # true
-                store %x_121_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %40:f32 = access %x_87, 1u
-            %x_106:f32 = let %40
-            %42:f32 = load_vector_element %x_98, 1u
-            %x_107:f32 = let %42
-            %44:bool = lt %x_106, %x_107
-            if %44 [t: $B9] {  # if_3
-              $B9: {  # true
-                store %x_121_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %45:f32 = load_vector_element %x_98, 2u
-            %46:f32 = add %x_102, %45
-            %47:bool = gt %x_101, %46
-            if %47 [t: $B10] {  # if_4
-              $B10: {  # true
-                store %x_121_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %48:f32 = load_vector_element %x_98, 3u
-            %49:f32 = add %x_107, %48
-            %50:bool = gt %x_106, %49
-            if %50 [t: $B11] {  # if_5
-              $B11: {  # true
-                store %x_121_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            store %x_121_phi, true
-            exit_switch  # switch_1
-          }
-        }
-        %51:bool = load %x_121_phi
-        %x_121:bool = let %51
-        %53:vec4<f32> = load %x_89
-        store %x_90_phi, %53
-        if %x_121 [t: $B12] {  # if_6
-          $B12: {  # true
-            store %x_78, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %54:ptr<function, vec4<f32>, read_write> = access %x_78, %x_92
-            %55:f32 = load_vector_element %54, 0u
-            %x_125:f32 = let %55
-            store %x_79, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %57:ptr<function, vec4<f32>, read_write> = access %x_79, %x_92
-            %58:f32 = load_vector_element %57, 1u
-            %x_128:f32 = let %58
-            store %x_80, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %60:i32 = call %tint_f32_to_i32, %x_125
-            %62:i32 = let %60
-            %63:i32 = call %tint_f32_to_i32, %x_128
-            %64:i32 = mul %62, %63
-            %65:i32 = mul %x_92, 9i
-            %66:i32 = add %64, %65
-            %67:i32 = add %66, 11i
-            %68:i32 = call %tint_mod_i32, %67, 16i
-            %70:ptr<function, vec4<f32>, read_write> = access %x_80, %68
-            %71:vec4<f32> = load %70
-            store %x_136, %71
-            %72:vec4<f32> = load %x_136
-            store %x_90_phi, %72
-            exit_if  # if_6
-          }
-        }
-        %73:vec4<f32> = load %x_90_phi
-        %x_90:vec4<f32> = let %73
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %75:i32 = add %x_92, 1i
-        store %x_93, %75
-        store %x_89_phi, %x_90
-        %76:i32 = load %x_93
-        store %x_92_phi, %76
-        next_iteration  # -> $B3
-      }
-    }
-    %77:vec4<f32> = load %x_89
-    store %x_GLF_color, %77
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B13: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %80:void = call %main_1
-    %81:vec4<f32> = load %x_GLF_color
-    %82:main_out = construct %81
-    ret %82
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B14: {
-    %85:bool = eq %rhs, 0i
-    %86:bool = eq %lhs, -2147483648i
-    %87:bool = eq %rhs, -1i
-    %88:bool = and %86, %87
-    %89:bool = or %85, %88
-    %90:i32 = select %rhs, 1i, %89
-    %91:i32 = let %90
-    %92:i32 = div %lhs, %91
-    %93:i32 = mul %92, %91
-    %94:i32 = sub %lhs, %93
-    ret %94
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %96:i32 = convert %value
-    %97:bool = gte %value, -2147483648.0f
-    %98:i32 = select -2147483648i, %96, %97
-    %99:bool = lte %value, 2147483520.0f
-    %100:i32 = select 2147483647i, %98, %99
-    ret %100
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.ir.msl
deleted file mode 100644
index 1f49091..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,141 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_69:ptr<function, i32, read_write> = var
-    %x_72:ptr<function, i32, read_write> = var
-    %8:vec4<f32> = load %gl_FragCoord
-    %9:vec2<f32> = swizzle %8, xy
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = div %9, %11
-    %x_59:vec2<f32> = let %12
-    %14:f32 = access %x_59, 0u
-    %15:f32 = mul %14, 10.0f
-    %16:i32 = call %tint_f32_to_i32, %15
-    %18:i32 = let %16
-    %19:f32 = access %x_59, 1u
-    %20:f32 = mul %19, 10.0f
-    %21:i32 = call %tint_f32_to_i32, %20
-    %22:i32 = mul %21, 10i
-    %23:i32 = add %18, %22
-    %x_67:i32 = let %23
-    store %x_69, 100i
-    store %x_72, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_70:ptr<function, i32, read_write> = var
-        %x_73:ptr<function, i32, read_write> = var
-        %27:i32 = load %x_72
-        %28:bool = lt %27, %x_67
-        if %28 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %29:i32 = load %x_69
-        %30:i32 = mul 4i, %29
-        %31:i32 = load %x_69
-        %32:i32 = sub 1000i, %31
-        %33:i32 = mul %30, %32
-        %34:i32 = call %tint_div_i32, %33, 1000i
-        store %x_70, %34
-        %36:i32 = load %x_72
-        %37:i32 = add %36, 1i
-        store %x_73, %37
-        %38:i32 = load %x_70
-        store %x_69, %38
-        %39:i32 = load %x_73
-        store %x_72, %39
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %40:array<vec4<f32>, 16> = load %indexable
-    %x_80:array<vec4<f32>, 16> = let %40
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_80
-    %x_81:vec2<f32> = let vec2<f32>(1.0f, 0.5f)
-    %43:i32 = load %x_69
-    %44:i32 = call %tint_mod_i32, %43, 16i
-    %46:ptr<function, vec4<f32>, read_write> = access %indexable, %44
-    %47:vec4<f32> = load %46
-    store %x_GLF_color, %47
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %50:void = call %main_1
-    %51:vec4<f32> = load %x_GLF_color
-    %52:main_out = construct %51
-    ret %52
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %55:bool = eq %rhs, 0i
-    %56:bool = eq %lhs, -2147483648i
-    %57:bool = eq %rhs, -1i
-    %58:bool = and %56, %57
-    %59:bool = or %55, %58
-    %60:i32 = select %rhs, 1i, %59
-    %61:i32 = div %lhs, %60
-    ret %61
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %64:bool = eq %rhs_1, 0i
-    %65:bool = eq %lhs_1, -2147483648i
-    %66:bool = eq %rhs_1, -1i
-    %67:bool = and %65, %66
-    %68:bool = or %64, %67
-    %69:i32 = select %rhs_1, 1i, %68
-    %70:i32 = let %69
-    %71:i32 = div %lhs_1, %70
-    %72:i32 = mul %71, %70
-    %73:i32 = sub %lhs_1, %72
-    ret %73
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %75:i32 = convert %value
-    %76:bool = gte %value, -2147483648.0f
-    %77:i32 = select -2147483648i, %75, %76
-    %78:bool = lte %value, 2147483520.0f
-    %79:i32 = select 2147483647i, %77, %78
-    ret %79
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.ir.msl
deleted file mode 100644
index 611a5c8..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,153 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_69:ptr<function, i32, read_write> = var
-    %x_69_phi:ptr<function, i32, read_write> = var
-    %x_72_phi:ptr<function, i32, read_write> = var
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_55:vec4<f32> = let %9
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %12:vec2<f32> = load %11
-    %x_58:vec2<f32> = let %12
-    %14:f32 = access %x_55, 0u
-    %15:f32 = access %x_55, 1u
-    %16:vec2<f32> = construct %14, %15
-    %17:vec2<f32> = div %16, %x_58
-    %x_59:vec2<f32> = let %17
-    %19:f32 = access %x_59, 0u
-    %20:f32 = mul %19, 10.0f
-    %21:i32 = call %tint_f32_to_i32, %20
-    %23:i32 = let %21
-    %24:f32 = access %x_59, 1u
-    %25:f32 = mul %24, 10.0f
-    %26:i32 = call %tint_f32_to_i32, %25
-    %27:i32 = mul %26, 10i
-    %28:i32 = add %23, %27
-    %x_67:i32 = let %28
-    store %x_69_phi, 100i
-    store %x_72_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_70:ptr<function, i32, read_write> = var
-        %x_73:ptr<function, i32, read_write> = var
-        %32:i32 = load %x_69_phi
-        store %x_69, %32
-        %33:i32 = load %x_72_phi
-        %x_72:i32 = let %33
-        %35:bool = lt %x_72, %x_67
-        if %35 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %36:i32 = load %x_69
-        %37:i32 = bitcast %36
-        %38:i32 = mul 4i, %37
-        %39:i32 = let %38
-        %40:i32 = load %x_69
-        %41:i32 = bitcast %40
-        %42:i32 = sub 1000i, %41
-        %43:i32 = mul %39, %42
-        %44:i32 = call %tint_div_i32, %43, 1000i
-        store %x_70, %44
-        %46:i32 = add %x_72, 1i
-        store %x_73, %46
-        %47:i32 = load %x_70
-        store %x_69_phi, %47
-        %48:i32 = load %x_73
-        store %x_72_phi, %48
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %49:array<vec4<f32>, 16> = load %indexable
-    %x_80:array<vec4<f32>, 16> = let %49
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_80
-    %x_81:vec2<f32> = let vec2<f32>(1.0f, 0.5f)
-    %52:i32 = load %x_69
-    %53:i32 = call %tint_mod_i32, %52, 16i
-    %55:i32 = bitcast %53
-    %56:ptr<function, vec4<f32>, read_write> = access %indexable, %55
-    %57:vec4<f32> = load %56
-    %x_83:vec4<f32> = let %57
-    store %x_GLF_color, %x_83
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %61:void = call %main_1
-    %62:vec4<f32> = load %x_GLF_color
-    %63:main_out = construct %62
-    ret %63
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %66:bool = eq %rhs, 0i
-    %67:bool = eq %lhs, -2147483648i
-    %68:bool = eq %rhs, -1i
-    %69:bool = and %67, %68
-    %70:bool = or %66, %69
-    %71:i32 = select %rhs, 1i, %70
-    %72:i32 = div %lhs, %71
-    ret %72
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %75:bool = eq %rhs_1, 0i
-    %76:bool = eq %lhs_1, -2147483648i
-    %77:bool = eq %rhs_1, -1i
-    %78:bool = and %76, %77
-    %79:bool = or %75, %78
-    %80:i32 = select %rhs_1, 1i, %79
-    %81:i32 = let %80
-    %82:i32 = div %lhs_1, %81
-    %83:i32 = mul %82, %81
-    %84:i32 = sub %lhs_1, %83
-    ret %84
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %86:i32 = convert %value
-    %87:bool = gte %value, -2147483648.0f
-    %88:i32 = select -2147483648i, %86, %87
-    %89:bool = lte %value, 2147483520.0f
-    %90:i32 = select 2147483647i, %88, %89
-    ret %90
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.ir.msl
deleted file mode 100644
index e38912f..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,137 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_69:ptr<function, i32, read_write> = var
-    %x_72:ptr<function, i32, read_write> = var
-    %8:vec4<f32> = load %gl_FragCoord
-    %9:vec2<f32> = swizzle %8, xy
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = div %9, %11
-    %x_59:vec2<f32> = let %12
-    %14:f32 = access %x_59, 0u
-    %15:f32 = mul %14, 10.0f
-    %16:i32 = call %tint_f32_to_i32, %15
-    %18:i32 = let %16
-    %19:f32 = access %x_59, 1u
-    %20:f32 = mul %19, 10.0f
-    %21:i32 = call %tint_f32_to_i32, %20
-    %22:i32 = mul %21, 10i
-    %23:i32 = add %18, %22
-    %x_67:i32 = let %23
-    store %x_69, 100i
-    store %x_72, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_70:ptr<function, i32, read_write> = var
-        %x_73:ptr<function, i32, read_write> = var
-        %27:i32 = load %x_72
-        %28:bool = lt %27, %x_67
-        if %28 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %29:i32 = load %x_69
-        %30:i32 = mul 4i, %29
-        %31:i32 = load %x_69
-        %32:i32 = sub 1000i, %31
-        %33:i32 = mul %30, %32
-        %34:i32 = call %tint_div_i32, %33, 1000i
-        store %x_70, %34
-        %36:i32 = load %x_72
-        %37:i32 = add %36, 1i
-        store %x_73, %37
-        %38:i32 = load %x_70
-        store %x_69, %38
-        %39:i32 = load %x_73
-        store %x_72, %39
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %x_80:vec2<f32> = let vec2<f32>(1.0f, 0.5f)
-    %41:i32 = load %x_69
-    %42:i32 = call %tint_mod_i32, %41, 16i
-    %44:ptr<function, vec4<f32>, read_write> = access %indexable, %42
-    %45:vec4<f32> = load %44
-    store %x_GLF_color, %45
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %48:void = call %main_1
-    %49:vec4<f32> = load %x_GLF_color
-    %50:main_out = construct %49
-    ret %50
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %53:bool = eq %rhs, 0i
-    %54:bool = eq %lhs, -2147483648i
-    %55:bool = eq %rhs, -1i
-    %56:bool = and %54, %55
-    %57:bool = or %53, %56
-    %58:i32 = select %rhs, 1i, %57
-    %59:i32 = div %lhs, %58
-    ret %59
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %62:bool = eq %rhs_1, 0i
-    %63:bool = eq %lhs_1, -2147483648i
-    %64:bool = eq %rhs_1, -1i
-    %65:bool = and %63, %64
-    %66:bool = or %62, %65
-    %67:i32 = select %rhs_1, 1i, %66
-    %68:i32 = let %67
-    %69:i32 = div %lhs_1, %68
-    %70:i32 = mul %69, %68
-    %71:i32 = sub %lhs_1, %70
-    ret %71
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %73:i32 = convert %value
-    %74:bool = gte %value, -2147483648.0f
-    %75:i32 = select -2147483648i, %73, %74
-    %76:bool = lte %value, 2147483520.0f
-    %77:i32 = select 2147483647i, %75, %76
-    ret %77
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.ir.msl
deleted file mode 100644
index cf23ec9..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-bifurcation-Os-mutate-var-vector-shuffle/2.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,149 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_69:ptr<function, i32, read_write> = var
-    %x_69_phi:ptr<function, i32, read_write> = var
-    %x_72_phi:ptr<function, i32, read_write> = var
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_55:vec4<f32> = let %9
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %12:vec2<f32> = load %11
-    %x_58:vec2<f32> = let %12
-    %14:f32 = access %x_55, 0u
-    %15:f32 = access %x_55, 1u
-    %16:vec2<f32> = construct %14, %15
-    %17:vec2<f32> = div %16, %x_58
-    %x_59:vec2<f32> = let %17
-    %19:f32 = access %x_59, 0u
-    %20:f32 = mul %19, 10.0f
-    %21:i32 = call %tint_f32_to_i32, %20
-    %23:i32 = let %21
-    %24:f32 = access %x_59, 1u
-    %25:f32 = mul %24, 10.0f
-    %26:i32 = call %tint_f32_to_i32, %25
-    %27:i32 = mul %26, 10i
-    %28:i32 = add %23, %27
-    %x_67:i32 = let %28
-    store %x_69_phi, 100i
-    store %x_72_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_70:ptr<function, i32, read_write> = var
-        %x_73:ptr<function, i32, read_write> = var
-        %32:i32 = load %x_69_phi
-        store %x_69, %32
-        %33:i32 = load %x_72_phi
-        %x_72:i32 = let %33
-        %35:bool = lt %x_72, %x_67
-        if %35 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %36:i32 = load %x_69
-        %37:i32 = bitcast %36
-        %38:i32 = mul 4i, %37
-        %39:i32 = let %38
-        %40:i32 = load %x_69
-        %41:i32 = bitcast %40
-        %42:i32 = sub 1000i, %41
-        %43:i32 = mul %39, %42
-        %44:i32 = call %tint_div_i32, %43, 1000i
-        store %x_70, %44
-        %46:i32 = add %x_72, 1i
-        store %x_73, %46
-        %47:i32 = load %x_70
-        store %x_69_phi, %47
-        %48:i32 = load %x_73
-        store %x_72_phi, %48
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %x_80:vec2<f32> = let vec2<f32>(1.0f, 0.5f)
-    %50:i32 = load %x_69
-    %51:i32 = call %tint_mod_i32, %50, 16i
-    %53:i32 = bitcast %51
-    %54:ptr<function, vec4<f32>, read_write> = access %indexable, %53
-    %55:vec4<f32> = load %54
-    %x_82:vec4<f32> = let %55
-    store %x_GLF_color, %x_82
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B7: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B8: {
-    %64:bool = eq %rhs, 0i
-    %65:bool = eq %lhs, -2147483648i
-    %66:bool = eq %rhs, -1i
-    %67:bool = and %65, %66
-    %68:bool = or %64, %67
-    %69:i32 = select %rhs, 1i, %68
-    %70:i32 = div %lhs, %69
-    ret %70
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B9: {
-    %73:bool = eq %rhs_1, 0i
-    %74:bool = eq %lhs_1, -2147483648i
-    %75:bool = eq %rhs_1, -1i
-    %76:bool = and %74, %75
-    %77:bool = or %73, %76
-    %78:i32 = select %rhs_1, 1i, %77
-    %79:i32 = let %78
-    %80:i32 = div %lhs_1, %79
-    %81:i32 = mul %80, %79
-    %82:i32 = sub %lhs_1, %81
-    ret %82
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B10: {
-    %84:i32 = convert %value
-    %85:bool = gte %value, -2147483648.0f
-    %86:i32 = select -2147483648i, %84, %85
-    %87:bool = lte %value, 2147483520.0f
-    %88:i32 = select 2147483647i, %86, %87
-    ret %88
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.ir.msl
deleted file mode 100644
index bef05c1..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,150 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_65:ptr<function, i32, read_write> = var
-    %x_68:ptr<function, i32, read_write> = var
-    %8:vec4<f32> = load %gl_FragCoord
-    %9:vec2<f32> = swizzle %8, xy
-    %10:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %11:vec2<f32> = load %10
-    %12:vec2<f32> = div %9, %11
-    %13:vec2<f32> = mul %12, 8.0f
-    %14:vec2<f32> = floor %13
-    %x_57:vec2<f32> = let %14
-    %16:f32 = access %x_57, 0u
-    %17:i32 = call %tint_f32_to_i32, %16
-    %19:i32 = mul %17, 8i
-    %20:i32 = let %19
-    %21:f32 = access %x_57, 1u
-    %22:i32 = call %tint_f32_to_i32, %21
-    %23:i32 = add %20, %22
-    %x_63:i32 = let %23
-    store %x_65, 0i
-    store %x_68, %x_63
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_79:ptr<function, i32, read_write> = var
-        %x_80:ptr<function, i32, read_write> = var
-        %x_69:ptr<function, i32, read_write> = var
-        %28:i32 = load %x_68
-        %29:bool = gt %28, 1i
-        if %29 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %30:i32 = load %x_68
-        %31:i32 = and %30, 1i
-        %32:bool = eq %31, 1i
-        if %32 [t: $B7, f: $B8] {  # if_2
-          $B7: {  # true
-            %33:i32 = load %x_68
-            %34:i32 = mul 3i, %33
-            %35:i32 = add %34, 1i
-            store %x_79, %35
-            %36:i32 = load %x_79
-            store %x_69, %36
-            exit_if  # if_2
-          }
-          $B8: {  # false
-            %37:i32 = load %x_68
-            %38:i32 = call %tint_div_i32, %37, 2i
-            store %x_80, %38
-            %40:i32 = load %x_80
-            store %x_69, %40
-            exit_if  # if_2
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %41:i32 = load %x_65
-        %42:i32 = add %41, 1i
-        store %x_65, %42
-        %43:i32 = load %x_69
-        store %x_68, %43
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %44:i32 = load %x_65
-    %45:i32 = call %tint_mod_i32, %44, 16i
-    %47:ptr<function, vec4<f32>, read_write> = access %indexable, %45
-    %48:vec4<f32> = load %47
-    store %x_GLF_color, %48
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B9: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %51:void = call %main_1
-    %52:vec4<f32> = load %x_GLF_color
-    %53:main_out = construct %52
-    ret %53
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B10: {
-    %56:bool = eq %rhs, 0i
-    %57:bool = eq %lhs, -2147483648i
-    %58:bool = eq %rhs, -1i
-    %59:bool = and %57, %58
-    %60:bool = or %56, %59
-    %61:i32 = select %rhs, 1i, %60
-    %62:i32 = div %lhs, %61
-    ret %62
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B11: {
-    %65:bool = eq %rhs_1, 0i
-    %66:bool = eq %lhs_1, -2147483648i
-    %67:bool = eq %rhs_1, -1i
-    %68:bool = and %66, %67
-    %69:bool = or %65, %68
-    %70:i32 = select %rhs_1, 1i, %69
-    %71:i32 = let %70
-    %72:i32 = div %lhs_1, %71
-    %73:i32 = mul %72, %71
-    %74:i32 = sub %lhs_1, %73
-    ret %74
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %76:i32 = convert %value
-    %77:bool = gte %value, -2147483648.0f
-    %78:i32 = select -2147483648i, %76, %77
-    %79:bool = lte %value, 2147483520.0f
-    %80:i32 = select 2147483647i, %78, %79
-    ret %80
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.ir.msl
deleted file mode 100644
index ee51673..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,159 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_65:ptr<function, i32, read_write> = var
-    %x_65_phi:ptr<function, i32, read_write> = var
-    %x_68_phi:ptr<function, i32, read_write> = var
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_51:vec4<f32> = let %9
-    %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %12:vec2<f32> = load %11
-    %x_54:vec2<f32> = let %12
-    %14:f32 = access %x_51, 0u
-    %15:f32 = access %x_51, 1u
-    %16:vec2<f32> = construct %14, %15
-    %17:vec2<f32> = div %16, %x_54
-    %18:vec2<f32> = mul %17, 8.0f
-    %19:vec2<f32> = floor %18
-    %x_57:vec2<f32> = let %19
-    %21:f32 = access %x_57, 0u
-    %22:i32 = call %tint_f32_to_i32, %21
-    %24:i32 = mul %22, 8i
-    %25:i32 = let %24
-    %26:f32 = access %x_57, 1u
-    %27:i32 = call %tint_f32_to_i32, %26
-    %28:i32 = add %25, %27
-    %x_63:i32 = let %28
-    store %x_65_phi, 0i
-    store %x_68_phi, %x_63
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_79:ptr<function, i32, read_write> = var
-        %x_80:ptr<function, i32, read_write> = var
-        %x_69_phi:ptr<function, i32, read_write> = var
-        %33:i32 = load %x_65_phi
-        store %x_65, %33
-        %34:i32 = load %x_68_phi
-        %x_68:i32 = let %34
-        %36:bool = gt %x_68, 1i
-        if %36 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %37:i32 = and %x_68, 1i
-        %38:bool = eq %37, 1i
-        if %38 [t: $B7, f: $B8] {  # if_2
-          $B7: {  # true
-            %39:i32 = mul 3i, %x_68
-            %40:i32 = add %39, 1i
-            store %x_79, %40
-            %41:i32 = load %x_79
-            store %x_69_phi, %41
-            exit_if  # if_2
-          }
-          $B8: {  # false
-            %42:i32 = call %tint_div_i32, %x_68, 2i
-            store %x_80, %42
-            %44:i32 = load %x_80
-            store %x_69_phi, %44
-            exit_if  # if_2
-          }
-        }
-        %45:i32 = load %x_69_phi
-        %x_69:i32 = let %45
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %47:i32 = load %x_65
-        %48:i32 = add %47, 1i
-        %49:i32 = bitcast %48
-        store %x_65_phi, %49
-        store %x_68_phi, %x_69
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %50:i32 = load %x_65
-    %51:i32 = call %tint_mod_i32, %50, 16i
-    %53:i32 = bitcast %51
-    %54:ptr<function, vec4<f32>, read_write> = access %indexable, %53
-    %55:vec4<f32> = load %54
-    %x_83:vec4<f32> = let %55
-    store %x_GLF_color, %x_83
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B9: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %59:void = call %main_1
-    %60:vec4<f32> = load %x_GLF_color
-    %61:main_out = construct %60
-    ret %61
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B10: {
-    %64:bool = eq %rhs, 0i
-    %65:bool = eq %lhs, -2147483648i
-    %66:bool = eq %rhs, -1i
-    %67:bool = and %65, %66
-    %68:bool = or %64, %67
-    %69:i32 = select %rhs, 1i, %68
-    %70:i32 = div %lhs, %69
-    ret %70
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B11: {
-    %73:bool = eq %rhs_1, 0i
-    %74:bool = eq %lhs_1, -2147483648i
-    %75:bool = eq %rhs_1, -1i
-    %76:bool = and %74, %75
-    %77:bool = or %73, %76
-    %78:i32 = select %rhs_1, 1i, %77
-    %79:i32 = let %78
-    %80:i32 = div %lhs_1, %79
-    %81:i32 = mul %80, %79
-    %82:i32 = sub %lhs_1, %81
-    ret %82
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %84:i32 = convert %value
-    %85:bool = gte %value, -2147483648.0f
-    %86:i32 = select -2147483648i, %84, %85
-    %87:bool = lte %value, 2147483520.0f
-    %88:i32 = select 2147483647i, %86, %87
-    ret %88
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.ir.msl
deleted file mode 100644
index 2168e8f..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,166 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_71:ptr<function, i32, read_write> = var
-    %x_74:ptr<function, i32, read_write> = var
-    %8:vec4<f32> = load %gl_FragCoord
-    %x_54:vec4<f32> = let %8
-    %10:vec4<f32> = load %gl_FragCoord
-    %11:vec2<f32> = swizzle %10, xy
-    %x_55:vec2<f32> = let %11
-    %13:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %14:vec2<f32> = load %13
-    %15:vec2<f32> = div %x_55, %14
-    %16:vec2<f32> = mul %15, 8.0f
-    %x_61:vec2<f32> = let %16
-    %18:vec2<f32> = floor %x_61
-    %x_62:vec2<f32> = let %18
-    %20:f32 = access %x_62, 0u
-    %21:i32 = call %tint_f32_to_i32, %20
-    %23:i32 = mul %21, 8i
-    %24:i32 = let %23
-    %25:f32 = access %x_62, 1u
-    %26:i32 = call %tint_f32_to_i32, %25
-    %27:i32 = add %24, %26
-    %x_69:i32 = let %27
-    store %x_71, 0i
-    store %x_74, %x_69
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_85:ptr<function, i32, read_write> = var
-        %x_86:ptr<function, i32, read_write> = var
-        %x_75:ptr<function, i32, read_write> = var
-        %32:i32 = load %x_74
-        %33:bool = gt %32, 1i
-        if %33 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %34:i32 = load %x_74
-        %35:i32 = and %34, 1i
-        %36:bool = eq %35, 1i
-        if %36 [t: $B7, f: $B8] {  # if_2
-          $B7: {  # true
-            %37:i32 = load %x_74
-            %38:i32 = mul 3i, %37
-            %39:i32 = add %38, 1i
-            store %x_85, %39
-            %40:i32 = load %x_85
-            store %x_75, %40
-            exit_if  # if_2
-          }
-          $B8: {  # false
-            %41:i32 = load %x_74
-            %42:i32 = call %tint_div_i32, %41, 2i
-            store %x_86, %42
-            %44:i32 = load %x_86
-            store %x_75, %44
-            exit_if  # if_2
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %45:i32 = load %x_71
-        %46:i32 = add %45, 1i
-        store %x_71, %46
-        %47:i32 = load %x_75
-        store %x_74, %47
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %48:array<vec4<f32>, 16> = load %indexable
-    %x_88:array<vec4<f32>, 16> = let %48
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_88
-    %50:array<vec4<f32>, 16> = construct vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), %x_54, vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %51:vec4<f32> = access %50, 1u
-    %x_89:vec4<f32> = let %51
-    %53:vec4<f32> = construct 0.0f, 8.0f, %x_55
-    %54:vec4<f32> = let %53
-    %55:vec4<f32> = construct %x_61, 0.5f, 1.0f
-    %56:array<vec4<f32>, 16> = construct vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), %54, vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), %55
-    %x_90:array<vec4<f32>, 16> = let %56
-    %58:i32 = load %x_71
-    %59:i32 = call %tint_mod_i32, %58, 16i
-    %61:ptr<function, vec4<f32>, read_write> = access %indexable, %59
-    %62:vec4<f32> = load %61
-    store %x_GLF_color, %62
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B9: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %65:void = call %main_1
-    %66:vec4<f32> = load %x_GLF_color
-    %67:main_out = construct %66
-    ret %67
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B10: {
-    %70:bool = eq %rhs, 0i
-    %71:bool = eq %lhs, -2147483648i
-    %72:bool = eq %rhs, -1i
-    %73:bool = and %71, %72
-    %74:bool = or %70, %73
-    %75:i32 = select %rhs, 1i, %74
-    %76:i32 = div %lhs, %75
-    ret %76
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B11: {
-    %79:bool = eq %rhs_1, 0i
-    %80:bool = eq %lhs_1, -2147483648i
-    %81:bool = eq %rhs_1, -1i
-    %82:bool = and %80, %81
-    %83:bool = or %79, %82
-    %84:i32 = select %rhs_1, 1i, %83
-    %85:i32 = let %84
-    %86:i32 = div %lhs_1, %85
-    %87:i32 = mul %86, %85
-    %88:i32 = sub %lhs_1, %87
-    ret %88
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %90:i32 = convert %value
-    %91:bool = gte %value, -2147483648.0f
-    %92:i32 = select -2147483648i, %90, %91
-    %93:bool = lte %value, 2147483520.0f
-    %94:i32 = select 2147483647i, %92, %93
-    ret %94
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.ir.msl
deleted file mode 100644
index 29ae266..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-collatz-O-mutate-composite-construct-extract/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,173 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_71:ptr<function, i32, read_write> = var
-    %x_71_phi:ptr<function, i32, read_write> = var
-    %x_74_phi:ptr<function, i32, read_write> = var
-    %9:vec4<f32> = load %gl_FragCoord
-    %x_54:vec4<f32> = let %9
-    %11:f32 = access %x_54, 0u
-    %12:f32 = access %x_54, 1u
-    %13:vec2<f32> = construct %11, %12
-    %x_55:vec2<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_58:vec2<f32> = let %16
-    %18:vec2<f32> = div %x_55, %x_58
-    %19:vec2<f32> = mul %18, 8.0f
-    %x_61:vec2<f32> = let %19
-    %21:vec2<f32> = floor %x_61
-    %x_62:vec2<f32> = let %21
-    %23:f32 = access %x_62, 0u
-    %24:i32 = call %tint_f32_to_i32, %23
-    %26:i32 = mul %24, 8i
-    %27:i32 = let %26
-    %28:f32 = access %x_62, 1u
-    %29:i32 = call %tint_f32_to_i32, %28
-    %30:i32 = add %27, %29
-    %x_69:i32 = let %30
-    store %x_71_phi, 0i
-    store %x_74_phi, %x_69
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_85:ptr<function, i32, read_write> = var
-        %x_86:ptr<function, i32, read_write> = var
-        %x_75_phi:ptr<function, i32, read_write> = var
-        %35:i32 = load %x_71_phi
-        store %x_71, %35
-        %36:i32 = load %x_74_phi
-        %x_74:i32 = let %36
-        %38:bool = gt %x_74, 1i
-        if %38 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %39:i32 = and %x_74, 1i
-        %40:bool = eq %39, 1i
-        if %40 [t: $B7, f: $B8] {  # if_2
-          $B7: {  # true
-            %41:i32 = mul 3i, %x_74
-            %42:i32 = add %41, 1i
-            store %x_85, %42
-            %43:i32 = load %x_85
-            store %x_75_phi, %43
-            exit_if  # if_2
-          }
-          $B8: {  # false
-            %44:i32 = call %tint_div_i32, %x_74, 2i
-            store %x_86, %44
-            %46:i32 = load %x_86
-            store %x_75_phi, %46
-            exit_if  # if_2
-          }
-        }
-        %47:i32 = load %x_75_phi
-        %x_75:i32 = let %47
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %49:i32 = load %x_71
-        %50:i32 = add %49, 1i
-        %51:i32 = bitcast %50
-        store %x_71_phi, %51
-        store %x_74_phi, %x_75
-        next_iteration  # -> $B3
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %52:array<vec4<f32>, 16> = load %indexable
-    %x_88:array<vec4<f32>, 16> = let %52
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_88
-    %54:array<vec4<f32>, 16> = construct vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), %x_54, vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-    %55:vec4<f32> = access %54, 1u
-    %x_89:vec4<f32> = let %55
-    %57:vec4<f32> = construct 0.0f, 8.0f, %x_55
-    %58:vec4<f32> = let %57
-    %59:vec4<f32> = construct %x_61, 0.5f, 1.0f
-    %60:array<vec4<f32>, 16> = construct vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), %58, vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), %59
-    %x_90:array<vec4<f32>, 16> = let %60
-    %62:i32 = load %x_71
-    %63:i32 = call %tint_mod_i32, %62, 16i
-    %65:i32 = bitcast %63
-    %66:ptr<function, vec4<f32>, read_write> = access %indexable, %65
-    %67:vec4<f32> = load %66
-    %x_92:vec4<f32> = let %67
-    store %x_GLF_color, %x_92
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B9: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %71:void = call %main_1
-    %72:vec4<f32> = load %x_GLF_color
-    %73:main_out = construct %72
-    ret %73
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B10: {
-    %76:bool = eq %rhs, 0i
-    %77:bool = eq %lhs, -2147483648i
-    %78:bool = eq %rhs, -1i
-    %79:bool = and %77, %78
-    %80:bool = or %76, %79
-    %81:i32 = select %rhs, 1i, %80
-    %82:i32 = div %lhs, %81
-    ret %82
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B11: {
-    %85:bool = eq %rhs_1, 0i
-    %86:bool = eq %lhs_1, -2147483648i
-    %87:bool = eq %rhs_1, -1i
-    %88:bool = and %86, %87
-    %89:bool = or %85, %88
-    %90:i32 = select %rhs_1, 1i, %89
-    %91:i32 = let %90
-    %92:i32 = div %lhs_1, %91
-    %93:i32 = mul %92, %91
-    %94:i32 = sub %lhs_1, %93
-    ret %94
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B12: {
-    %96:i32 = convert %value
-    %97:bool = gte %value, -2147483648.0f
-    %98:i32 = select -2147483648i, %96, %97
-    %99:bool = lte %value, 2147483520.0f
-    %100:i32 = select 2147483647i, %98, %99
-    ret %100
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.ir.msl
deleted file mode 100644
index 546198e..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,212 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_77:ptr<function, vec2<i32>, read_write> = var
-    %x_80:ptr<function, i32, read_write> = var
-    %x_110:ptr<function, vec2<i32>, read_write> = var
-    %x_111:ptr<function, vec2<i32>, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_116:ptr<function, i32, read_write> = var
-    %12:vec4<f32> = load %gl_FragCoord
-    %13:vec2<f32> = swizzle %12, xy
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %15:vec2<f32> = load %14
-    %16:vec2<f32> = div %13, %15
-    %x_60:vec2<f32> = let %16
-    %18:f32 = access %x_60, 0u
-    %19:f32 = mul %18, 8.0f
-    %20:i32 = call %tint_f32_to_i32, %19
-    %x_63:i32 = let %20
-    %23:f32 = access %x_60, 1u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_66:i32 = let %25
-    %27:i32 = and %x_63, 5i
-    %28:i32 = and %x_66, 10i
-    %29:i32 = or %27, %28
-    %30:i32 = mul %29, 8i
-    %31:i32 = and %x_66, 5i
-    %32:i32 = and %x_63, 10i
-    %33:i32 = or %31, %32
-    %34:i32 = add %30, %33
-    %35:vec2<i32> = construct %34, 0i
-    store %x_77, %35
-    store %x_80, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_91:ptr<function, vec2<i32>, read_write> = var
-        %x_92:ptr<function, vec2<i32>, read_write> = var
-        %x_99:ptr<function, vec2<i32>, read_write> = var
-        %x_100:ptr<function, vec2<i32>, read_write> = var
-        %x_81:ptr<function, i32, read_write> = var
-        %41:i32 = load %x_80
-        %42:bool = lt %41, 100i
-        if %42 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %43:vec2<i32> = load %x_77
-        store %x_92, %43
-        %44:i32 = load_vector_element %x_77, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: $B7] {  # if_2
-          $B7: {  # true
-            %46:vec2<i32> = load %x_77
-            store %x_91, %46
-            %47:i32 = load_vector_element %x_77, 1u
-            %48:i32 = sub %47, 1i
-            store_vector_element %x_91, 1u, %48
-            %49:vec2<i32> = load %x_91
-            store %x_92, %49
-            exit_if  # if_2
-          }
-        }
-        %50:vec2<i32> = load %x_92
-        store %x_100, %50
-        %51:i32 = load_vector_element %x_92, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: $B8] {  # if_3
-          $B8: {  # true
-            %53:vec2<i32> = load %x_92
-            store %x_99, %53
-            %54:i32 = load_vector_element %x_92, 1u
-            %55:i32 = add %54, 1i
-            store_vector_element %x_99, 1u, %55
-            %56:vec2<i32> = load %x_99
-            store %x_100, %56
-            exit_if  # if_3
-          }
-        }
-        %57:vec2<i32> = load %x_100
-        %x_78_1:ptr<function, vec2<i32>, read_write> = var, %57
-        %59:i32 = load_vector_element %x_100, 0u
-        %60:i32 = let %59
-        %61:i32 = load_vector_element %x_100, 1u
-        %62:i32 = call %tint_div_i32, %61, 2i
-        %64:i32 = add %60, %62
-        store_vector_element %x_78_1, 0u, %64
-        %65:vec2<i32> = load %x_78_1
-        %x_78:vec2<i32> = let %65
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %67:i32 = load %x_80
-        %68:i32 = add %67, 1i
-        store %x_81, %68
-        store %x_77, %x_78
-        %69:i32 = load %x_81
-        store %x_80, %69
-        next_iteration  # -> $B3
-      }
-    }
-    %70:i32 = load_vector_element %x_77, 0u
-    %x_105:i32 = let %70
-    %72:vec2<i32> = load %x_77
-    store %x_111, %72
-    %73:bool = lt %x_105, 0i
-    if %73 [t: $B9] {  # if_4
-      $B9: {  # true
-        store %x_110, vec2<i32>(0i)
-        %74:i32 = negation %x_105
-        store_vector_element %x_110, 0u, %74
-        %75:vec2<i32> = load %x_110
-        store %x_111, %75
-        exit_if  # if_4
-      }
-    }
-    %76:vec2<i32> = load %x_111
-    store %x_113, %76
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_114:ptr<function, vec2<i32>, read_write> = var
-        %78:i32 = load_vector_element %x_113, 0u
-        store %x_116, %78
-        %79:i32 = load %x_116
-        %80:bool = gt %79, 15i
-        if %80 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_114, vec2<i32>(0i)
-        %81:i32 = load %x_116
-        %82:i32 = sub %81, 16i
-        store_vector_element %x_114, 0u, %82
-        %83:vec2<i32> = load %x_114
-        store %x_113, %83
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %84:i32 = load %x_116
-    %85:ptr<function, vec4<f32>, read_write> = access %indexable, %84
-    %86:vec4<f32> = load %85
-    store %x_GLF_color, %86
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %89:void = call %main_1
-    %90:vec4<f32> = load %x_GLF_color
-    %91:main_out = construct %90
-    ret %91
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %94:bool = eq %rhs, 0i
-    %95:bool = eq %lhs, -2147483648i
-    %96:bool = eq %rhs, -1i
-    %97:bool = and %95, %96
-    %98:bool = or %94, %97
-    %99:i32 = select %rhs, 1i, %98
-    %100:i32 = div %lhs, %99
-    ret %100
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %102:i32 = convert %value
-    %103:bool = gte %value, -2147483648.0f
-    %104:i32 = select -2147483648i, %102, %103
-    %105:bool = lte %value, 2147483520.0f
-    %106:i32 = select 2147483647i, %104, %105
-    ret %106
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.ir.msl
deleted file mode 100644
index 37f898b..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,225 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_77:ptr<function, vec2<i32>, read_write> = var
-    %x_110:ptr<function, vec2<i32>, read_write> = var
-    %x_116:ptr<function, i32, read_write> = var
-    %x_77_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_80_phi:ptr<function, i32, read_write> = var
-    %x_111_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_113_phi:ptr<function, vec2<i32>, read_write> = var
-    %13:vec4<f32> = load %gl_FragCoord
-    %x_56:vec4<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_59:vec2<f32> = let %16
-    %18:f32 = access %x_56, 0u
-    %19:f32 = access %x_56, 1u
-    %20:vec2<f32> = construct %18, %19
-    %21:vec2<f32> = div %20, %x_59
-    %x_60:vec2<f32> = let %21
-    %23:f32 = access %x_60, 0u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_63:i32 = let %25
-    %28:f32 = access %x_60, 1u
-    %29:f32 = mul %28, 8.0f
-    %30:i32 = call %tint_f32_to_i32, %29
-    %x_66:i32 = let %30
-    %32:i32 = and %x_63, 5i
-    %33:i32 = and %x_66, 10i
-    %34:i32 = or %32, %33
-    %35:i32 = mul %34, 8i
-    %36:i32 = and %x_66, 5i
-    %37:i32 = and %x_63, 10i
-    %38:i32 = or %36, %37
-    %39:i32 = add %35, %38
-    %40:vec2<i32> = construct %39, 0i
-    %x_75:vec2<i32> = let %40
-    store %x_77_phi, %x_75
-    store %x_80_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_91:ptr<function, vec2<i32>, read_write> = var
-        %x_99:ptr<function, vec2<i32>, read_write> = var
-        %x_81:ptr<function, i32, read_write> = var
-        %x_92_phi:ptr<function, vec2<i32>, read_write> = var
-        %x_100_phi:ptr<function, vec2<i32>, read_write> = var
-        %47:vec2<i32> = load %x_77_phi
-        store %x_77, %47
-        %48:i32 = load %x_80_phi
-        %x_80:i32 = let %48
-        %50:bool = lt %x_80, 100i
-        if %50 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %51:vec2<i32> = load %x_77
-        store %x_92_phi, %51
-        %52:i32 = load_vector_element %x_77, 0u
-        %53:bool = gt %52, 0i
-        if %53 [t: $B7] {  # if_2
-          $B7: {  # true
-            %54:vec2<i32> = load %x_77
-            store %x_91, %54
-            %55:i32 = load_vector_element %x_77, 1u
-            %56:i32 = sub %55, 1i
-            store_vector_element %x_91, 1u, %56
-            %57:vec2<i32> = load %x_91
-            store %x_92_phi, %57
-            exit_if  # if_2
-          }
-        }
-        %58:vec2<i32> = load %x_92_phi
-        %x_92:vec2<i32> = let %58
-        store %x_100_phi, %x_92
-        %60:i32 = access %x_92, 0u
-        %61:bool = lt %60, 0i
-        if %61 [t: $B8] {  # if_3
-          $B8: {  # true
-            store %x_99, %x_92
-            %62:i32 = access %x_92, 1u
-            %63:i32 = add %62, 1i
-            store_vector_element %x_99, 1u, %63
-            %64:vec2<i32> = load %x_99
-            store %x_100_phi, %64
-            exit_if  # if_3
-          }
-        }
-        %65:vec2<i32> = load %x_100_phi
-        %x_100:vec2<i32> = let %65
-        %x_78_1:ptr<function, vec2<i32>, read_write> = var, %x_100
-        %68:i32 = access %x_100, 0u
-        %69:i32 = access %x_100, 1u
-        %70:i32 = call %tint_div_i32, %69, 2i
-        %72:i32 = add %68, %70
-        store_vector_element %x_78_1, 0u, %72
-        %73:vec2<i32> = load %x_78_1
-        %x_78:vec2<i32> = let %73
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %75:i32 = add %x_80, 1i
-        store %x_81, %75
-        store %x_77_phi, %x_78
-        %76:i32 = load %x_81
-        store %x_80_phi, %76
-        next_iteration  # -> $B3
-      }
-    }
-    %77:i32 = load_vector_element %x_77, 0u
-    %x_105:i32 = let %77
-    %79:vec2<i32> = load %x_77
-    store %x_111_phi, %79
-    %80:bool = lt %x_105, 0i
-    if %80 [t: $B9] {  # if_4
-      $B9: {  # true
-        store %x_110, vec2<i32>(0i)
-        %81:i32 = negation %x_105
-        store_vector_element %x_110, 0u, %81
-        %82:vec2<i32> = load %x_110
-        store %x_111_phi, %82
-        exit_if  # if_4
-      }
-    }
-    %83:vec2<i32> = load %x_111_phi
-    %x_111:vec2<i32> = let %83
-    store %x_113_phi, %x_111
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_114:ptr<function, vec2<i32>, read_write> = var
-        %86:vec2<i32> = load %x_113_phi
-        %x_113:vec2<i32> = let %86
-        %88:i32 = access %x_113, 0u
-        store %x_116, %88
-        %89:i32 = load %x_116
-        %90:bool = gt %89, 15i
-        if %90 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_114, vec2<i32>(0i)
-        %91:i32 = load %x_116
-        %92:i32 = sub %91, 16i
-        %93:i32 = bitcast %92
-        store_vector_element %x_114, 0u, %93
-        %94:vec2<i32> = load %x_114
-        store %x_113_phi, %94
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %95:i32 = load %x_116
-    %96:ptr<function, vec4<f32>, read_write> = access %indexable, %95
-    %97:vec4<f32> = load %96
-    %x_121:vec4<f32> = let %97
-    store %x_GLF_color, %x_121
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %101:void = call %main_1
-    %102:vec4<f32> = load %x_GLF_color
-    %103:main_out = construct %102
-    ret %103
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %106:bool = eq %rhs, 0i
-    %107:bool = eq %lhs, -2147483648i
-    %108:bool = eq %rhs, -1i
-    %109:bool = and %107, %108
-    %110:bool = or %106, %109
-    %111:i32 = select %rhs, 1i, %110
-    %112:i32 = div %lhs, %111
-    ret %112
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %114:i32 = convert %value
-    %115:bool = gte %value, -2147483648.0f
-    %116:i32 = select -2147483648i, %114, %115
-    %117:bool = lte %value, 2147483520.0f
-    %118:i32 = select 2147483647i, %116, %117
-    ret %118
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.ir.msl
deleted file mode 100644
index 2d0afab3..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,216 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_80:ptr<function, vec2<i32>, read_write> = var
-    %x_83:ptr<function, i32, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_114:ptr<function, vec2<i32>, read_write> = var
-    %x_116:ptr<function, vec2<i32>, read_write> = var
-    %x_119:ptr<function, i32, read_write> = var
-    %12:vec4<f32> = load %gl_FragCoord
-    %13:vec2<f32> = swizzle %12, xy
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %15:vec2<f32> = load %14
-    %16:vec2<f32> = div %13, %15
-    %x_63:vec2<f32> = let %16
-    %18:f32 = access %x_63, 0u
-    %19:f32 = mul %18, 8.0f
-    %20:i32 = call %tint_f32_to_i32, %19
-    %x_66:i32 = let %20
-    %23:f32 = access %x_63, 1u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_69:i32 = let %25
-    %27:i32 = and %x_66, 5i
-    %28:i32 = and %x_69, 10i
-    %29:i32 = or %27, %28
-    %30:i32 = mul %29, 8i
-    %31:i32 = and %x_69, 5i
-    %32:i32 = and %x_66, 10i
-    %33:i32 = or %31, %32
-    %34:i32 = add %30, %33
-    %35:vec2<i32> = construct %34, 0i
-    store %x_80, %35
-    store %x_83, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_94:ptr<function, vec2<i32>, read_write> = var
-        %x_95:ptr<function, vec2<i32>, read_write> = var
-        %x_102:ptr<function, vec2<i32>, read_write> = var
-        %x_103:ptr<function, vec2<i32>, read_write> = var
-        %x_84:ptr<function, i32, read_write> = var
-        %41:i32 = load %x_83
-        %42:bool = lt %41, 100i
-        if %42 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %43:vec2<i32> = load %x_80
-        store %x_95, %43
-        %44:i32 = load_vector_element %x_80, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: $B7] {  # if_2
-          $B7: {  # true
-            %46:vec2<i32> = load %x_80
-            store %x_94, %46
-            %47:i32 = load_vector_element %x_80, 1u
-            %48:i32 = sub %47, 1i
-            store_vector_element %x_94, 1u, %48
-            %49:vec2<i32> = load %x_94
-            store %x_95, %49
-            exit_if  # if_2
-          }
-        }
-        %50:vec2<i32> = load %x_95
-        store %x_103, %50
-        %51:i32 = load_vector_element %x_95, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: $B8] {  # if_3
-          $B8: {  # true
-            %53:vec2<i32> = load %x_95
-            store %x_102, %53
-            %54:i32 = load_vector_element %x_95, 1u
-            %55:i32 = add %54, 1i
-            store_vector_element %x_102, 1u, %55
-            %56:vec2<i32> = load %x_102
-            store %x_103, %56
-            exit_if  # if_3
-          }
-        }
-        %57:vec2<i32> = load %x_103
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %57
-        %59:i32 = load_vector_element %x_103, 0u
-        %60:i32 = let %59
-        %61:i32 = load_vector_element %x_103, 1u
-        %62:i32 = call %tint_div_i32, %61, 2i
-        %64:i32 = add %60, %62
-        store_vector_element %x_81_1, 0u, %64
-        %65:vec2<i32> = load %x_81_1
-        %x_81:vec2<i32> = let %65
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %67:i32 = load %x_83
-        %68:i32 = add %67, 1i
-        store %x_84, %68
-        store %x_80, %x_81
-        %69:i32 = load %x_84
-        store %x_83, %69
-        next_iteration  # -> $B3
-      }
-    }
-    %70:i32 = load_vector_element %x_80, 0u
-    %x_108:i32 = let %70
-    %72:vec2<i32> = load %x_80
-    store %x_114, %72
-    %73:bool = lt %x_108, 0i
-    if %73 [t: $B9] {  # if_4
-      $B9: {  # true
-        store %x_113, vec2<i32>(0i)
-        %74:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %74
-        %75:vec2<i32> = load %x_113
-        store %x_114, %75
-        exit_if  # if_4
-      }
-    }
-    %76:vec2<i32> = load %x_114
-    store %x_116, %76
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_117:ptr<function, vec2<i32>, read_write> = var
-        %78:i32 = load_vector_element %x_116, 0u
-        store %x_119, %78
-        %79:i32 = load %x_119
-        %80:bool = gt %79, 15i
-        if %80 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_117, vec2<i32>(0i)
-        %81:i32 = load %x_119
-        %82:i32 = sub %81, 16i
-        store_vector_element %x_117, 0u, %82
-        %83:vec2<i32> = load %x_117
-        store %x_116, %83
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %84:array<vec4<f32>, 16> = load %indexable
-    %x_123:array<vec4<f32>, 16> = let %84
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_123
-    %86:i32 = load %x_119
-    %87:ptr<function, vec4<f32>, read_write> = access %indexable, %86
-    %88:vec4<f32> = load %87
-    store %x_GLF_color, %88
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %91:void = call %main_1
-    %92:vec4<f32> = load %x_GLF_color
-    %93:main_out = construct %92
-    ret %93
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %96:bool = eq %rhs, 0i
-    %97:bool = eq %lhs, -2147483648i
-    %98:bool = eq %rhs, -1i
-    %99:bool = and %97, %98
-    %100:bool = or %96, %99
-    %101:i32 = select %rhs, 1i, %100
-    %102:i32 = div %lhs, %101
-    ret %102
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %104:i32 = convert %value
-    %105:bool = gte %value, -2147483648.0f
-    %106:i32 = select -2147483648i, %104, %105
-    %107:bool = lte %value, 2147483520.0f
-    %108:i32 = select 2147483647i, %106, %107
-    ret %108
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.ir.msl
deleted file mode 100644
index 11e508b..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-O-mutate-variable/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,229 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_80:ptr<function, vec2<i32>, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_119:ptr<function, i32, read_write> = var
-    %x_80_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_83_phi:ptr<function, i32, read_write> = var
-    %x_114_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_116_phi:ptr<function, vec2<i32>, read_write> = var
-    %13:vec4<f32> = load %gl_FragCoord
-    %x_59:vec4<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_62:vec2<f32> = let %16
-    %18:f32 = access %x_59, 0u
-    %19:f32 = access %x_59, 1u
-    %20:vec2<f32> = construct %18, %19
-    %21:vec2<f32> = div %20, %x_62
-    %x_63:vec2<f32> = let %21
-    %23:f32 = access %x_63, 0u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_66:i32 = let %25
-    %28:f32 = access %x_63, 1u
-    %29:f32 = mul %28, 8.0f
-    %30:i32 = call %tint_f32_to_i32, %29
-    %x_69:i32 = let %30
-    %32:i32 = and %x_66, 5i
-    %33:i32 = and %x_69, 10i
-    %34:i32 = or %32, %33
-    %35:i32 = mul %34, 8i
-    %36:i32 = and %x_69, 5i
-    %37:i32 = and %x_66, 10i
-    %38:i32 = or %36, %37
-    %39:i32 = add %35, %38
-    %40:vec2<i32> = construct %39, 0i
-    %x_78:vec2<i32> = let %40
-    store %x_80_phi, %x_78
-    store %x_83_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_94:ptr<function, vec2<i32>, read_write> = var
-        %x_102:ptr<function, vec2<i32>, read_write> = var
-        %x_84:ptr<function, i32, read_write> = var
-        %x_95_phi:ptr<function, vec2<i32>, read_write> = var
-        %x_103_phi:ptr<function, vec2<i32>, read_write> = var
-        %47:vec2<i32> = load %x_80_phi
-        store %x_80, %47
-        %48:i32 = load %x_83_phi
-        %x_83:i32 = let %48
-        %50:bool = lt %x_83, 100i
-        if %50 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %51:vec2<i32> = load %x_80
-        store %x_95_phi, %51
-        %52:i32 = load_vector_element %x_80, 0u
-        %53:bool = gt %52, 0i
-        if %53 [t: $B7] {  # if_2
-          $B7: {  # true
-            %54:vec2<i32> = load %x_80
-            store %x_94, %54
-            %55:i32 = load_vector_element %x_80, 1u
-            %56:i32 = sub %55, 1i
-            store_vector_element %x_94, 1u, %56
-            %57:vec2<i32> = load %x_94
-            store %x_95_phi, %57
-            exit_if  # if_2
-          }
-        }
-        %58:vec2<i32> = load %x_95_phi
-        %x_95:vec2<i32> = let %58
-        store %x_103_phi, %x_95
-        %60:i32 = access %x_95, 0u
-        %61:bool = lt %60, 0i
-        if %61 [t: $B8] {  # if_3
-          $B8: {  # true
-            store %x_102, %x_95
-            %62:i32 = access %x_95, 1u
-            %63:i32 = add %62, 1i
-            store_vector_element %x_102, 1u, %63
-            %64:vec2<i32> = load %x_102
-            store %x_103_phi, %64
-            exit_if  # if_3
-          }
-        }
-        %65:vec2<i32> = load %x_103_phi
-        %x_103:vec2<i32> = let %65
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %x_103
-        %68:i32 = access %x_103, 0u
-        %69:i32 = access %x_103, 1u
-        %70:i32 = call %tint_div_i32, %69, 2i
-        %72:i32 = add %68, %70
-        store_vector_element %x_81_1, 0u, %72
-        %73:vec2<i32> = load %x_81_1
-        %x_81:vec2<i32> = let %73
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %75:i32 = add %x_83, 1i
-        store %x_84, %75
-        store %x_80_phi, %x_81
-        %76:i32 = load %x_84
-        store %x_83_phi, %76
-        next_iteration  # -> $B3
-      }
-    }
-    %77:i32 = load_vector_element %x_80, 0u
-    %x_108:i32 = let %77
-    %79:vec2<i32> = load %x_80
-    store %x_114_phi, %79
-    %80:bool = lt %x_108, 0i
-    if %80 [t: $B9] {  # if_4
-      $B9: {  # true
-        store %x_113, vec2<i32>(0i)
-        %81:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %81
-        %82:vec2<i32> = load %x_113
-        store %x_114_phi, %82
-        exit_if  # if_4
-      }
-    }
-    %83:vec2<i32> = load %x_114_phi
-    %x_114:vec2<i32> = let %83
-    store %x_116_phi, %x_114
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_117:ptr<function, vec2<i32>, read_write> = var
-        %86:vec2<i32> = load %x_116_phi
-        %x_116:vec2<i32> = let %86
-        %88:i32 = access %x_116, 0u
-        store %x_119, %88
-        %89:i32 = load %x_119
-        %90:bool = gt %89, 15i
-        if %90 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_117, vec2<i32>(0i)
-        %91:i32 = load %x_119
-        %92:i32 = sub %91, 16i
-        %93:i32 = bitcast %92
-        store_vector_element %x_117, 0u, %93
-        %94:vec2<i32> = load %x_117
-        store %x_116_phi, %94
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %95:array<vec4<f32>, 16> = load %indexable
-    %x_123:array<vec4<f32>, 16> = let %95
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_123
-    %97:i32 = load %x_119
-    %98:ptr<function, vec4<f32>, read_write> = access %indexable, %97
-    %99:vec4<f32> = load %98
-    %x_125:vec4<f32> = let %99
-    store %x_GLF_color, %x_125
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %103:void = call %main_1
-    %104:vec4<f32> = load %x_GLF_color
-    %105:main_out = construct %104
-    ret %105
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %108:bool = eq %rhs, 0i
-    %109:bool = eq %lhs, -2147483648i
-    %110:bool = eq %rhs, -1i
-    %111:bool = and %109, %110
-    %112:bool = or %108, %111
-    %113:i32 = select %rhs, 1i, %112
-    %114:i32 = div %lhs, %113
-    ret %114
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %116:i32 = convert %value
-    %117:bool = gte %value, -2147483648.0f
-    %118:i32 = select -2147483648i, %116, %117
-    %119:bool = lte %value, 2147483520.0f
-    %120:i32 = select 2147483647i, %118, %119
-    ret %120
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.ir.msl
deleted file mode 100644
index 7b6e195..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,214 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_76:ptr<function, vec2<i32>, read_write> = var
-    %x_79:ptr<function, i32, read_write> = var
-    %x_109:ptr<function, vec2<i32>, read_write> = var
-    %x_110:ptr<function, vec2<i32>, read_write> = var
-    %x_112:ptr<function, vec2<i32>, read_write> = var
-    %x_115:ptr<function, i32, read_write> = var
-    %12:vec4<f32> = load %gl_FragCoord
-    %13:vec2<f32> = swizzle %12, xy
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %15:vec2<f32> = load %14
-    %16:vec2<f32> = div %13, %15
-    %x_59:vec2<f32> = let %16
-    %18:f32 = access %x_59, 0u
-    %19:f32 = mul %18, 8.0f
-    %20:i32 = call %tint_f32_to_i32, %19
-    %x_62:i32 = let %20
-    %23:f32 = access %x_59, 1u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_65:i32 = let %25
-    %27:i32 = and %x_62, 5i
-    %28:i32 = and %x_65, 10i
-    %29:i32 = or %27, %28
-    %30:i32 = mul %29, 8i
-    %31:i32 = and %x_65, 5i
-    %32:i32 = and %x_62, 10i
-    %33:i32 = or %31, %32
-    %34:i32 = add %30, %33
-    %35:vec2<i32> = construct %34, 0i
-    store %x_76, %35
-    store %x_79, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_90:ptr<function, vec2<i32>, read_write> = var
-        %x_91:ptr<function, vec2<i32>, read_write> = var
-        %x_98:ptr<function, vec2<i32>, read_write> = var
-        %x_99:ptr<function, vec2<i32>, read_write> = var
-        %x_80:ptr<function, i32, read_write> = var
-        %41:i32 = load %x_79
-        %42:bool = lt %41, 100i
-        if %42 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %43:vec2<i32> = load %x_76
-        store %x_91, %43
-        %44:i32 = load_vector_element %x_76, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: $B7] {  # if_2
-          $B7: {  # true
-            %46:vec2<i32> = load %x_76
-            store %x_90, %46
-            %47:i32 = load_vector_element %x_76, 1u
-            %48:i32 = sub %47, 1i
-            store_vector_element %x_90, 1u, %48
-            %49:vec2<i32> = load %x_90
-            store %x_91, %49
-            exit_if  # if_2
-          }
-        }
-        %50:vec2<i32> = load %x_91
-        store %x_99, %50
-        %51:i32 = load_vector_element %x_91, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: $B8] {  # if_3
-          $B8: {  # true
-            %53:vec2<i32> = load %x_91
-            store %x_98, %53
-            %54:i32 = load_vector_element %x_91, 1u
-            %55:i32 = add %54, 1i
-            store_vector_element %x_98, 1u, %55
-            %56:vec2<i32> = load %x_98
-            store %x_99, %56
-            exit_if  # if_3
-          }
-        }
-        %57:vec2<i32> = load %x_99
-        %x_77_1:ptr<function, vec2<i32>, read_write> = var, %57
-        %59:i32 = load_vector_element %x_99, 0u
-        %60:i32 = let %59
-        %61:i32 = load_vector_element %x_99, 1u
-        %62:i32 = call %tint_div_i32, %61, 2i
-        %64:i32 = add %60, %62
-        store_vector_element %x_77_1, 0u, %64
-        %65:vec2<i32> = load %x_77_1
-        %x_77:vec2<i32> = let %65
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %67:i32 = load %x_79
-        %68:i32 = add %67, 1i
-        store %x_80, %68
-        store %x_76, %x_77
-        %69:i32 = load %x_80
-        store %x_79, %69
-        next_iteration  # -> $B3
-      }
-    }
-    %70:i32 = load_vector_element %x_76, 0u
-    %x_104:i32 = let %70
-    %72:vec2<i32> = load %x_76
-    store %x_110, %72
-    %73:bool = lt %x_104, 0i
-    if %73 [t: $B9] {  # if_4
-      $B9: {  # true
-        %74:vec2<i32> = load %x_76
-        store %x_109, %74
-        %75:i32 = negation %x_104
-        store_vector_element %x_109, 0u, %75
-        %76:vec2<i32> = load %x_109
-        store %x_110, %76
-        exit_if  # if_4
-      }
-    }
-    %77:vec2<i32> = load %x_110
-    store %x_112, %77
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_113:ptr<function, vec2<i32>, read_write> = var
-        %79:i32 = load_vector_element %x_112, 0u
-        store %x_115, %79
-        %80:i32 = load %x_115
-        %81:bool = gt %80, 15i
-        if %81 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        %82:vec2<i32> = load %x_112
-        store %x_113, %82
-        %83:i32 = load %x_115
-        %84:i32 = sub %83, 16i
-        store_vector_element %x_113, 0u, %84
-        %85:vec2<i32> = load %x_113
-        store %x_112, %85
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %86:i32 = load %x_115
-    %87:ptr<function, vec4<f32>, read_write> = access %indexable, %86
-    %88:vec4<f32> = load %87
-    store %x_GLF_color, %88
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %91:void = call %main_1
-    %92:vec4<f32> = load %x_GLF_color
-    %93:main_out = construct %92
-    ret %93
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %96:bool = eq %rhs, 0i
-    %97:bool = eq %lhs, -2147483648i
-    %98:bool = eq %rhs, -1i
-    %99:bool = and %97, %98
-    %100:bool = or %96, %99
-    %101:i32 = select %rhs, 1i, %100
-    %102:i32 = div %lhs, %101
-    ret %102
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %104:i32 = convert %value
-    %105:bool = gte %value, -2147483648.0f
-    %106:i32 = select -2147483648i, %104, %105
-    %107:bool = lte %value, 2147483520.0f
-    %108:i32 = select 2147483647i, %106, %107
-    ret %108
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.ir.msl
deleted file mode 100644
index f48bba4..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,226 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_76:ptr<function, vec2<i32>, read_write> = var
-    %x_109:ptr<function, vec2<i32>, read_write> = var
-    %x_115:ptr<function, i32, read_write> = var
-    %x_76_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_79_phi:ptr<function, i32, read_write> = var
-    %x_110_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_112_phi:ptr<function, vec2<i32>, read_write> = var
-    %13:vec4<f32> = load %gl_FragCoord
-    %x_55:vec4<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_58:vec2<f32> = let %16
-    %18:f32 = access %x_55, 0u
-    %19:f32 = access %x_55, 1u
-    %20:vec2<f32> = construct %18, %19
-    %21:vec2<f32> = div %20, %x_58
-    %x_59:vec2<f32> = let %21
-    %23:f32 = access %x_59, 0u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_62:i32 = let %25
-    %28:f32 = access %x_59, 1u
-    %29:f32 = mul %28, 8.0f
-    %30:i32 = call %tint_f32_to_i32, %29
-    %x_65:i32 = let %30
-    %32:i32 = and %x_62, 5i
-    %33:i32 = and %x_65, 10i
-    %34:i32 = or %32, %33
-    %35:i32 = mul %34, 8i
-    %36:i32 = and %x_65, 5i
-    %37:i32 = and %x_62, 10i
-    %38:i32 = or %36, %37
-    %39:i32 = add %35, %38
-    %40:vec2<i32> = construct %39, 0i
-    %x_74:vec2<i32> = let %40
-    store %x_76_phi, %x_74
-    store %x_79_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_90:ptr<function, vec2<i32>, read_write> = var
-        %x_98:ptr<function, vec2<i32>, read_write> = var
-        %x_80:ptr<function, i32, read_write> = var
-        %x_91_phi:ptr<function, vec2<i32>, read_write> = var
-        %x_99_phi:ptr<function, vec2<i32>, read_write> = var
-        %47:vec2<i32> = load %x_76_phi
-        store %x_76, %47
-        %48:i32 = load %x_79_phi
-        %x_79:i32 = let %48
-        %50:bool = lt %x_79, 100i
-        if %50 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %51:vec2<i32> = load %x_76
-        store %x_91_phi, %51
-        %52:i32 = load_vector_element %x_76, 0u
-        %53:bool = gt %52, 0i
-        if %53 [t: $B7] {  # if_2
-          $B7: {  # true
-            %54:vec2<i32> = load %x_76
-            store %x_90, %54
-            %55:i32 = load_vector_element %x_76, 1u
-            %56:i32 = sub %55, 1i
-            store_vector_element %x_90, 1u, %56
-            %57:vec2<i32> = load %x_90
-            store %x_91_phi, %57
-            exit_if  # if_2
-          }
-        }
-        %58:vec2<i32> = load %x_91_phi
-        %x_91:vec2<i32> = let %58
-        store %x_99_phi, %x_91
-        %60:i32 = access %x_91, 0u
-        %61:bool = lt %60, 0i
-        if %61 [t: $B8] {  # if_3
-          $B8: {  # true
-            store %x_98, %x_91
-            %62:i32 = access %x_91, 1u
-            %63:i32 = add %62, 1i
-            store_vector_element %x_98, 1u, %63
-            %64:vec2<i32> = load %x_98
-            store %x_99_phi, %64
-            exit_if  # if_3
-          }
-        }
-        %65:vec2<i32> = load %x_99_phi
-        %x_99:vec2<i32> = let %65
-        %x_77_1:ptr<function, vec2<i32>, read_write> = var, %x_99
-        %68:i32 = access %x_99, 0u
-        %69:i32 = access %x_99, 1u
-        %70:i32 = call %tint_div_i32, %69, 2i
-        %72:i32 = add %68, %70
-        store_vector_element %x_77_1, 0u, %72
-        %73:vec2<i32> = load %x_77_1
-        %x_77:vec2<i32> = let %73
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %75:i32 = add %x_79, 1i
-        store %x_80, %75
-        store %x_76_phi, %x_77
-        %76:i32 = load %x_80
-        store %x_79_phi, %76
-        next_iteration  # -> $B3
-      }
-    }
-    %77:i32 = load_vector_element %x_76, 0u
-    %x_104:i32 = let %77
-    %79:vec2<i32> = load %x_76
-    store %x_110_phi, %79
-    %80:bool = lt %x_104, 0i
-    if %80 [t: $B9] {  # if_4
-      $B9: {  # true
-        %81:vec2<i32> = load %x_76
-        store %x_109, %81
-        %82:i32 = negation %x_104
-        store_vector_element %x_109, 0u, %82
-        %83:vec2<i32> = load %x_109
-        store %x_110_phi, %83
-        exit_if  # if_4
-      }
-    }
-    %84:vec2<i32> = load %x_110_phi
-    %x_110:vec2<i32> = let %84
-    store %x_112_phi, %x_110
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_113:ptr<function, vec2<i32>, read_write> = var
-        %87:vec2<i32> = load %x_112_phi
-        %x_112:vec2<i32> = let %87
-        %89:i32 = access %x_112, 0u
-        store %x_115, %89
-        %90:i32 = load %x_115
-        %91:bool = gt %90, 15i
-        if %91 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_113, %x_112
-        %92:i32 = load %x_115
-        %93:i32 = sub %92, 16i
-        %94:i32 = bitcast %93
-        store_vector_element %x_113, 0u, %94
-        %95:vec2<i32> = load %x_113
-        store %x_112_phi, %95
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %96:i32 = load %x_115
-    %97:ptr<function, vec4<f32>, read_write> = access %indexable, %96
-    %98:vec4<f32> = load %97
-    %x_120:vec4<f32> = let %98
-    store %x_GLF_color, %x_120
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %102:void = call %main_1
-    %103:vec4<f32> = load %x_GLF_color
-    %104:main_out = construct %103
-    ret %104
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %107:bool = eq %rhs, 0i
-    %108:bool = eq %lhs, -2147483648i
-    %109:bool = eq %rhs, -1i
-    %110:bool = and %108, %109
-    %111:bool = or %107, %110
-    %112:i32 = select %rhs, 1i, %111
-    %113:i32 = div %lhs, %112
-    ret %113
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %115:i32 = convert %value
-    %116:bool = gte %value, -2147483648.0f
-    %117:i32 = select -2147483648i, %115, %116
-    %118:bool = lte %value, 2147483520.0f
-    %119:i32 = select 2147483647i, %117, %118
-    ret %119
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.ir.msl
deleted file mode 100644
index e4a6707..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,218 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_80:ptr<function, vec2<i32>, read_write> = var
-    %x_83:ptr<function, i32, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_114:ptr<function, vec2<i32>, read_write> = var
-    %x_116:ptr<function, vec2<i32>, read_write> = var
-    %x_119:ptr<function, i32, read_write> = var
-    %12:vec4<f32> = load %gl_FragCoord
-    %13:vec2<f32> = swizzle %12, xy
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %15:vec2<f32> = load %14
-    %16:vec2<f32> = div %13, %15
-    %x_62:vec2<f32> = let %16
-    %18:f32 = access %x_62, 0u
-    %19:f32 = mul %18, 8.0f
-    %20:i32 = call %tint_f32_to_i32, %19
-    %x_65:i32 = let %20
-    %23:f32 = access %x_62, 1u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_69:i32 = let %25
-    %27:i32 = and %x_65, 5i
-    %28:i32 = and %x_69, 10i
-    %29:i32 = or %27, %28
-    %30:i32 = mul %29, 8i
-    %31:i32 = and %x_69, 5i
-    %32:i32 = and %x_65, 10i
-    %33:i32 = or %31, %32
-    %34:i32 = add %30, %33
-    %35:vec2<i32> = construct %34, 0i
-    store %x_80, %35
-    store %x_83, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_94:ptr<function, vec2<i32>, read_write> = var
-        %x_95:ptr<function, vec2<i32>, read_write> = var
-        %x_102:ptr<function, vec2<i32>, read_write> = var
-        %x_103:ptr<function, vec2<i32>, read_write> = var
-        %x_84:ptr<function, i32, read_write> = var
-        %41:i32 = load %x_83
-        %42:bool = lt %41, 100i
-        if %42 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %43:vec2<i32> = load %x_80
-        store %x_95, %43
-        %44:i32 = load_vector_element %x_80, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: $B7] {  # if_2
-          $B7: {  # true
-            %46:vec2<i32> = load %x_80
-            store %x_94, %46
-            %47:i32 = load_vector_element %x_80, 1u
-            %48:i32 = sub %47, 1i
-            store_vector_element %x_94, 1u, %48
-            %49:vec2<i32> = load %x_94
-            store %x_95, %49
-            exit_if  # if_2
-          }
-        }
-        %50:vec2<i32> = load %x_95
-        store %x_103, %50
-        %51:i32 = load_vector_element %x_95, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: $B8] {  # if_3
-          $B8: {  # true
-            %53:vec2<i32> = load %x_95
-            store %x_102, %53
-            %54:i32 = load_vector_element %x_95, 1u
-            %55:i32 = add %54, 1i
-            store_vector_element %x_102, 1u, %55
-            %56:vec2<i32> = load %x_102
-            store %x_103, %56
-            exit_if  # if_3
-          }
-        }
-        %57:vec2<i32> = load %x_103
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %57
-        %59:i32 = load_vector_element %x_103, 0u
-        %60:i32 = let %59
-        %61:i32 = load_vector_element %x_103, 1u
-        %62:i32 = call %tint_div_i32, %61, 2i
-        %64:i32 = add %60, %62
-        store_vector_element %x_81_1, 0u, %64
-        %65:vec2<i32> = load %x_81_1
-        %x_81:vec2<i32> = let %65
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %67:i32 = load %x_83
-        %68:i32 = add %67, 1i
-        store %x_84, %68
-        store %x_80, %x_81
-        %69:i32 = load %x_84
-        store %x_83, %69
-        next_iteration  # -> $B3
-      }
-    }
-    %70:i32 = load_vector_element %x_80, 0u
-    %x_108:i32 = let %70
-    %72:vec2<i32> = load %x_80
-    store %x_114, %72
-    %73:bool = lt %x_108, 0i
-    if %73 [t: $B9] {  # if_4
-      $B9: {  # true
-        %74:vec2<i32> = load %x_80
-        store %x_113, %74
-        %75:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %75
-        %76:vec2<i32> = load %x_113
-        store %x_114, %76
-        exit_if  # if_4
-      }
-    }
-    %77:vec2<i32> = load %x_114
-    store %x_116, %77
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_117:ptr<function, vec2<i32>, read_write> = var
-        %79:i32 = load_vector_element %x_116, 0u
-        store %x_119, %79
-        %80:i32 = load %x_119
-        %81:bool = gt %80, 15i
-        if %81 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        %82:vec2<i32> = load %x_116
-        store %x_117, %82
-        %83:i32 = load %x_119
-        %84:i32 = sub %83, 16i
-        store_vector_element %x_117, 0u, %84
-        %85:vec2<i32> = load %x_117
-        store %x_116, %85
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %86:array<vec4<f32>, 16> = load %indexable
-    %x_124:array<vec4<f32>, 16> = let %86
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_124
-    %88:i32 = load %x_119
-    %89:ptr<function, vec4<f32>, read_write> = access %indexable, %88
-    %90:vec4<f32> = load %89
-    store %x_GLF_color, %90
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %93:void = call %main_1
-    %94:vec4<f32> = load %x_GLF_color
-    %95:main_out = construct %94
-    ret %95
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %98:bool = eq %rhs, 0i
-    %99:bool = eq %lhs, -2147483648i
-    %100:bool = eq %rhs, -1i
-    %101:bool = and %99, %100
-    %102:bool = or %98, %101
-    %103:i32 = select %rhs, 1i, %102
-    %104:i32 = div %lhs, %103
-    ret %104
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %106:i32 = convert %value
-    %107:bool = gte %value, -2147483648.0f
-    %108:i32 = select -2147483648i, %106, %107
-    %109:bool = lte %value, 2147483520.0f
-    %110:i32 = select 2147483647i, %108, %109
-    ret %110
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.ir.msl
deleted file mode 100644
index a4cf65d..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,230 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_80:ptr<function, vec2<i32>, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_119:ptr<function, i32, read_write> = var
-    %x_80_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_83_phi:ptr<function, i32, read_write> = var
-    %x_114_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_116_phi:ptr<function, vec2<i32>, read_write> = var
-    %13:vec4<f32> = load %gl_FragCoord
-    %x_58:vec4<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_61:vec2<f32> = let %16
-    %18:f32 = access %x_58, 0u
-    %19:f32 = access %x_58, 1u
-    %20:vec2<f32> = construct %18, %19
-    %21:vec2<f32> = div %20, %x_61
-    %x_62:vec2<f32> = let %21
-    %23:f32 = access %x_62, 0u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_65:i32 = let %25
-    %28:f32 = access %x_62, 1u
-    %29:f32 = mul %28, 8.0f
-    %30:i32 = call %tint_f32_to_i32, %29
-    %x_69:i32 = let %30
-    %32:i32 = and %x_65, 5i
-    %33:i32 = and %x_69, 10i
-    %34:i32 = or %32, %33
-    %35:i32 = mul %34, 8i
-    %36:i32 = and %x_69, 5i
-    %37:i32 = and %x_65, 10i
-    %38:i32 = or %36, %37
-    %39:i32 = add %35, %38
-    %40:vec2<i32> = construct %39, 0i
-    %x_78:vec2<i32> = let %40
-    store %x_80_phi, %x_78
-    store %x_83_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_94:ptr<function, vec2<i32>, read_write> = var
-        %x_102:ptr<function, vec2<i32>, read_write> = var
-        %x_84:ptr<function, i32, read_write> = var
-        %x_95_phi:ptr<function, vec2<i32>, read_write> = var
-        %x_103_phi:ptr<function, vec2<i32>, read_write> = var
-        %47:vec2<i32> = load %x_80_phi
-        store %x_80, %47
-        %48:i32 = load %x_83_phi
-        %x_83:i32 = let %48
-        %50:bool = lt %x_83, 100i
-        if %50 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %51:vec2<i32> = load %x_80
-        store %x_95_phi, %51
-        %52:i32 = load_vector_element %x_80, 0u
-        %53:bool = gt %52, 0i
-        if %53 [t: $B7] {  # if_2
-          $B7: {  # true
-            %54:vec2<i32> = load %x_80
-            store %x_94, %54
-            %55:i32 = load_vector_element %x_80, 1u
-            %56:i32 = sub %55, 1i
-            store_vector_element %x_94, 1u, %56
-            %57:vec2<i32> = load %x_94
-            store %x_95_phi, %57
-            exit_if  # if_2
-          }
-        }
-        %58:vec2<i32> = load %x_95_phi
-        %x_95:vec2<i32> = let %58
-        store %x_103_phi, %x_95
-        %60:i32 = access %x_95, 0u
-        %61:bool = lt %60, 0i
-        if %61 [t: $B8] {  # if_3
-          $B8: {  # true
-            store %x_102, %x_95
-            %62:i32 = access %x_95, 1u
-            %63:i32 = add %62, 1i
-            store_vector_element %x_102, 1u, %63
-            %64:vec2<i32> = load %x_102
-            store %x_103_phi, %64
-            exit_if  # if_3
-          }
-        }
-        %65:vec2<i32> = load %x_103_phi
-        %x_103:vec2<i32> = let %65
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %x_103
-        %68:i32 = access %x_103, 0u
-        %69:i32 = access %x_103, 1u
-        %70:i32 = call %tint_div_i32, %69, 2i
-        %72:i32 = add %68, %70
-        store_vector_element %x_81_1, 0u, %72
-        %73:vec2<i32> = load %x_81_1
-        %x_81:vec2<i32> = let %73
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %75:i32 = add %x_83, 1i
-        store %x_84, %75
-        store %x_80_phi, %x_81
-        %76:i32 = load %x_84
-        store %x_83_phi, %76
-        next_iteration  # -> $B3
-      }
-    }
-    %77:i32 = load_vector_element %x_80, 0u
-    %x_108:i32 = let %77
-    %79:vec2<i32> = load %x_80
-    store %x_114_phi, %79
-    %80:bool = lt %x_108, 0i
-    if %80 [t: $B9] {  # if_4
-      $B9: {  # true
-        %81:vec2<i32> = load %x_80
-        store %x_113, %81
-        %82:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %82
-        %83:vec2<i32> = load %x_113
-        store %x_114_phi, %83
-        exit_if  # if_4
-      }
-    }
-    %84:vec2<i32> = load %x_114_phi
-    %x_114:vec2<i32> = let %84
-    store %x_116_phi, %x_114
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_117:ptr<function, vec2<i32>, read_write> = var
-        %87:vec2<i32> = load %x_116_phi
-        %x_116:vec2<i32> = let %87
-        %89:i32 = access %x_116, 0u
-        store %x_119, %89
-        %90:i32 = load %x_119
-        %91:bool = gt %90, 15i
-        if %91 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_117, %x_116
-        %92:i32 = load %x_119
-        %93:i32 = sub %92, 16i
-        %94:i32 = bitcast %93
-        store_vector_element %x_117, 0u, %94
-        %95:vec2<i32> = load %x_117
-        store %x_116_phi, %95
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %96:array<vec4<f32>, 16> = load %indexable
-    %x_124:array<vec4<f32>, 16> = let %96
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
-    store %indexable, %x_124
-    %98:i32 = load %x_119
-    %99:ptr<function, vec4<f32>, read_write> = access %indexable, %98
-    %100:vec4<f32> = load %99
-    %x_125:vec4<f32> = let %100
-    store %x_GLF_color, %x_125
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %104:void = call %main_1
-    %105:vec4<f32> = load %x_GLF_color
-    %106:main_out = construct %105
-    ret %106
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %109:bool = eq %rhs, 0i
-    %110:bool = eq %lhs, -2147483648i
-    %111:bool = eq %rhs, -1i
-    %112:bool = and %110, %111
-    %113:bool = or %109, %112
-    %114:i32 = select %rhs, 1i, %113
-    %115:i32 = div %lhs, %114
-    ret %115
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %117:i32 = convert %value
-    %118:bool = gte %value, -2147483648.0f
-    %119:i32 = select -2147483648i, %117, %118
-    %120:bool = lte %value, 2147483520.0f
-    %121:i32 = select 2147483647i, %119, %120
-    ret %121
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.ir.msl
deleted file mode 100644
index 10601ee..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,214 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_80:ptr<function, vec2<i32>, read_write> = var
-    %x_83:ptr<function, i32, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_114:ptr<function, vec2<i32>, read_write> = var
-    %x_116:ptr<function, vec2<i32>, read_write> = var
-    %x_119:ptr<function, i32, read_write> = var
-    %12:vec4<f32> = load %gl_FragCoord
-    %13:vec2<f32> = swizzle %12, xy
-    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %15:vec2<f32> = load %14
-    %16:vec2<f32> = div %13, %15
-    %x_62:vec2<f32> = let %16
-    %18:f32 = access %x_62, 0u
-    %19:f32 = mul %18, 8.0f
-    %20:i32 = call %tint_f32_to_i32, %19
-    %x_65:i32 = let %20
-    %23:f32 = access %x_62, 1u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_69:i32 = let %25
-    %27:i32 = and %x_65, 5i
-    %28:i32 = and %x_69, 10i
-    %29:i32 = or %27, %28
-    %30:i32 = mul %29, 8i
-    %31:i32 = and %x_69, 5i
-    %32:i32 = and %x_65, 10i
-    %33:i32 = or %31, %32
-    %34:i32 = add %30, %33
-    %35:vec2<i32> = construct %34, 0i
-    store %x_80, %35
-    store %x_83, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_94:ptr<function, vec2<i32>, read_write> = var
-        %x_95:ptr<function, vec2<i32>, read_write> = var
-        %x_102:ptr<function, vec2<i32>, read_write> = var
-        %x_103:ptr<function, vec2<i32>, read_write> = var
-        %x_84:ptr<function, i32, read_write> = var
-        %41:i32 = load %x_83
-        %42:bool = lt %41, 100i
-        if %42 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %43:vec2<i32> = load %x_80
-        store %x_95, %43
-        %44:i32 = load_vector_element %x_80, 0u
-        %45:bool = gt %44, 0i
-        if %45 [t: $B7] {  # if_2
-          $B7: {  # true
-            %46:vec2<i32> = load %x_80
-            store %x_94, %46
-            %47:i32 = load_vector_element %x_80, 1u
-            %48:i32 = sub %47, 1i
-            store_vector_element %x_94, 1u, %48
-            %49:vec2<i32> = load %x_94
-            store %x_95, %49
-            exit_if  # if_2
-          }
-        }
-        %50:vec2<i32> = load %x_95
-        store %x_103, %50
-        %51:i32 = load_vector_element %x_95, 0u
-        %52:bool = lt %51, 0i
-        if %52 [t: $B8] {  # if_3
-          $B8: {  # true
-            %53:vec2<i32> = load %x_95
-            store %x_102, %53
-            %54:i32 = load_vector_element %x_95, 1u
-            %55:i32 = add %54, 1i
-            store_vector_element %x_102, 1u, %55
-            %56:vec2<i32> = load %x_102
-            store %x_103, %56
-            exit_if  # if_3
-          }
-        }
-        %57:vec2<i32> = load %x_103
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %57
-        %59:i32 = load_vector_element %x_103, 0u
-        %60:i32 = let %59
-        %61:i32 = load_vector_element %x_103, 1u
-        %62:i32 = call %tint_div_i32, %61, 2i
-        %64:i32 = add %60, %62
-        store_vector_element %x_81_1, 0u, %64
-        %65:vec2<i32> = load %x_81_1
-        %x_81:vec2<i32> = let %65
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %67:i32 = load %x_83
-        %68:i32 = add %67, 1i
-        store %x_84, %68
-        store %x_80, %x_81
-        %69:i32 = load %x_84
-        store %x_83, %69
-        next_iteration  # -> $B3
-      }
-    }
-    %70:i32 = load_vector_element %x_80, 0u
-    %x_108:i32 = let %70
-    %72:vec2<i32> = load %x_80
-    store %x_114, %72
-    %73:bool = lt %x_108, 0i
-    if %73 [t: $B9] {  # if_4
-      $B9: {  # true
-        %74:vec2<i32> = load %x_80
-        store %x_113, %74
-        %75:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %75
-        %76:vec2<i32> = load %x_113
-        store %x_114, %76
-        exit_if  # if_4
-      }
-    }
-    %77:vec2<i32> = load %x_114
-    store %x_116, %77
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_117:ptr<function, vec2<i32>, read_write> = var
-        %79:i32 = load_vector_element %x_116, 0u
-        store %x_119, %79
-        %80:i32 = load %x_119
-        %81:bool = gt %80, 15i
-        if %81 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        %82:vec2<i32> = load %x_116
-        store %x_117, %82
-        %83:i32 = load %x_119
-        %84:i32 = sub %83, 16i
-        store_vector_element %x_117, 0u, %84
-        %85:vec2<i32> = load %x_117
-        store %x_116, %85
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %86:i32 = load %x_119
-    %87:ptr<function, vec4<f32>, read_write> = access %indexable, %86
-    %88:vec4<f32> = load %87
-    store %x_GLF_color, %88
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %91:void = call %main_1
-    %92:vec4<f32> = load %x_GLF_color
-    %93:main_out = construct %92
-    ret %93
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %96:bool = eq %rhs, 0i
-    %97:bool = eq %lhs, -2147483648i
-    %98:bool = eq %rhs, -1i
-    %99:bool = and %97, %98
-    %100:bool = or %96, %99
-    %101:i32 = select %rhs, 1i, %100
-    %102:i32 = div %lhs, %101
-    ret %102
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %104:i32 = convert %value
-    %105:bool = gte %value, -2147483648.0f
-    %106:i32 = select -2147483648i, %104, %105
-    %107:bool = lte %value, 2147483520.0f
-    %108:i32 = select 2147483647i, %106, %107
-    ret %108
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.ir.msl
deleted file mode 100644
index 91749ee1..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-orbit-Os-access-chain-mutate-pointer/2.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,226 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_80:ptr<function, vec2<i32>, read_write> = var
-    %x_113:ptr<function, vec2<i32>, read_write> = var
-    %x_119:ptr<function, i32, read_write> = var
-    %x_80_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_83_phi:ptr<function, i32, read_write> = var
-    %x_114_phi:ptr<function, vec2<i32>, read_write> = var
-    %x_116_phi:ptr<function, vec2<i32>, read_write> = var
-    %13:vec4<f32> = load %gl_FragCoord
-    %x_58:vec4<f32> = let %13
-    %15:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %16:vec2<f32> = load %15
-    %x_61:vec2<f32> = let %16
-    %18:f32 = access %x_58, 0u
-    %19:f32 = access %x_58, 1u
-    %20:vec2<f32> = construct %18, %19
-    %21:vec2<f32> = div %20, %x_61
-    %x_62:vec2<f32> = let %21
-    %23:f32 = access %x_62, 0u
-    %24:f32 = mul %23, 8.0f
-    %25:i32 = call %tint_f32_to_i32, %24
-    %x_65:i32 = let %25
-    %28:f32 = access %x_62, 1u
-    %29:f32 = mul %28, 8.0f
-    %30:i32 = call %tint_f32_to_i32, %29
-    %x_69:i32 = let %30
-    %32:i32 = and %x_65, 5i
-    %33:i32 = and %x_69, 10i
-    %34:i32 = or %32, %33
-    %35:i32 = mul %34, 8i
-    %36:i32 = and %x_69, 5i
-    %37:i32 = and %x_65, 10i
-    %38:i32 = or %36, %37
-    %39:i32 = add %35, %38
-    %40:vec2<i32> = construct %39, 0i
-    %x_78:vec2<i32> = let %40
-    store %x_80_phi, %x_78
-    store %x_83_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_94:ptr<function, vec2<i32>, read_write> = var
-        %x_102:ptr<function, vec2<i32>, read_write> = var
-        %x_84:ptr<function, i32, read_write> = var
-        %x_95_phi:ptr<function, vec2<i32>, read_write> = var
-        %x_103_phi:ptr<function, vec2<i32>, read_write> = var
-        %47:vec2<i32> = load %x_80_phi
-        store %x_80, %47
-        %48:i32 = load %x_83_phi
-        %x_83:i32 = let %48
-        %50:bool = lt %x_83, 100i
-        if %50 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %51:vec2<i32> = load %x_80
-        store %x_95_phi, %51
-        %52:i32 = load_vector_element %x_80, 0u
-        %53:bool = gt %52, 0i
-        if %53 [t: $B7] {  # if_2
-          $B7: {  # true
-            %54:vec2<i32> = load %x_80
-            store %x_94, %54
-            %55:i32 = load_vector_element %x_80, 1u
-            %56:i32 = sub %55, 1i
-            store_vector_element %x_94, 1u, %56
-            %57:vec2<i32> = load %x_94
-            store %x_95_phi, %57
-            exit_if  # if_2
-          }
-        }
-        %58:vec2<i32> = load %x_95_phi
-        %x_95:vec2<i32> = let %58
-        store %x_103_phi, %x_95
-        %60:i32 = access %x_95, 0u
-        %61:bool = lt %60, 0i
-        if %61 [t: $B8] {  # if_3
-          $B8: {  # true
-            store %x_102, %x_95
-            %62:i32 = access %x_95, 1u
-            %63:i32 = add %62, 1i
-            store_vector_element %x_102, 1u, %63
-            %64:vec2<i32> = load %x_102
-            store %x_103_phi, %64
-            exit_if  # if_3
-          }
-        }
-        %65:vec2<i32> = load %x_103_phi
-        %x_103:vec2<i32> = let %65
-        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %x_103
-        %68:i32 = access %x_103, 0u
-        %69:i32 = access %x_103, 1u
-        %70:i32 = call %tint_div_i32, %69, 2i
-        %72:i32 = add %68, %70
-        store_vector_element %x_81_1, 0u, %72
-        %73:vec2<i32> = load %x_81_1
-        %x_81:vec2<i32> = let %73
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %75:i32 = add %x_83, 1i
-        store %x_84, %75
-        store %x_80_phi, %x_81
-        %76:i32 = load %x_84
-        store %x_83_phi, %76
-        next_iteration  # -> $B3
-      }
-    }
-    %77:i32 = load_vector_element %x_80, 0u
-    %x_108:i32 = let %77
-    %79:vec2<i32> = load %x_80
-    store %x_114_phi, %79
-    %80:bool = lt %x_108, 0i
-    if %80 [t: $B9] {  # if_4
-      $B9: {  # true
-        %81:vec2<i32> = load %x_80
-        store %x_113, %81
-        %82:i32 = negation %x_108
-        store_vector_element %x_113, 0u, %82
-        %83:vec2<i32> = load %x_113
-        store %x_114_phi, %83
-        exit_if  # if_4
-      }
-    }
-    %84:vec2<i32> = load %x_114_phi
-    %x_114:vec2<i32> = let %84
-    store %x_116_phi, %x_114
-    loop [b: $B10, c: $B11] {  # loop_2
-      $B10: {  # body
-        %x_117:ptr<function, vec2<i32>, read_write> = var
-        %87:vec2<i32> = load %x_116_phi
-        %x_116:vec2<i32> = let %87
-        %89:i32 = access %x_116, 0u
-        store %x_119, %89
-        %90:i32 = load %x_119
-        %91:bool = gt %90, 15i
-        if %91 [t: $B12, f: $B13] {  # if_5
-          $B12: {  # true
-            exit_if  # if_5
-          }
-          $B13: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        continue  # -> $B11
-      }
-      $B11: {  # continuing
-        store %x_117, %x_116
-        %92:i32 = load %x_119
-        %93:i32 = sub %92, 16i
-        %94:i32 = bitcast %93
-        store_vector_element %x_117, 0u, %94
-        %95:vec2<i32> = load %x_117
-        store %x_116_phi, %95
-        next_iteration  # -> $B10
-      }
-    }
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %96:i32 = load %x_119
-    %97:ptr<function, vec4<f32>, read_write> = access %indexable, %96
-    %98:vec4<f32> = load %97
-    %x_124:vec4<f32> = let %98
-    store %x_GLF_color, %x_124
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B14: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %102:void = call %main_1
-    %103:vec4<f32> = load %x_GLF_color
-    %104:main_out = construct %103
-    ret %104
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B15: {
-    %107:bool = eq %rhs, 0i
-    %108:bool = eq %lhs, -2147483648i
-    %109:bool = eq %rhs, -1i
-    %110:bool = and %108, %109
-    %111:bool = or %107, %110
-    %112:i32 = select %rhs, 1i, %111
-    %113:i32 = div %lhs, %112
-    ret %113
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B16: {
-    %115:i32 = convert %value
-    %116:bool = gte %value, -2147483648.0f
-    %117:i32 = select -2147483648i, %115, %116
-    %118:bool = lte %value, 2147483520.0f
-    %119:i32 = select 2147483647i, %117, %118
-    ret %119
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.ir.msl
deleted file mode 100644
index 04428d8..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,203 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_81:ptr<function, array<vec4<f32>, 8>, read_write> = var, array<vec4<f32>, 8>(vec4<f32>(0.0f))
-    %x_82:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_83:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_84:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_85:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_95:ptr<function, vec4<f32>, read_write> = var
-    %x_98:ptr<function, i32, read_write> = var
-    store %x_81, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-    %12:array<vec4<f32>, 8> = load %x_81
-    %x_86:array<vec4<f32>, 8> = let %12
-    %14:vec4<f32> = load %gl_FragCoord
-    %15:vec2<f32> = swizzle %14, xy
-    %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %17:vec2<f32> = load %16
-    %18:vec2<f32> = div %15, %17
-    %19:vec2<f32> = mul %18, 32.0f
-    %20:vec2<f32> = floor %19
-    %x_93:vec2<f32> = let %20
-    store %x_95, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
-    store %x_98, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_127:ptr<function, bool, read_write> = var
-        %x_143:ptr<function, vec4<f32>, read_write> = var
-        %x_96:ptr<function, vec4<f32>, read_write> = var
-        %x_99:ptr<function, i32, read_write> = var
-        %26:i32 = load %x_98
-        %27:bool = lt %26, 8i
-        if %27 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %x_104:ptr<function, vec4<f32>, read_write> = var
-        store %x_82, %x_86
-        %29:i32 = load %x_98
-        %30:ptr<function, vec4<f32>, read_write> = access %x_82, %29
-        %31:vec4<f32> = load %30
-        store %x_104, %31
-        switch 0u [c: (default, $B7)] {  # switch_1
-          $B7: {  # case
-            %32:f32 = access %x_93, 0u
-            %x_107:f32 = let %32
-            %34:f32 = load_vector_element %x_104, 0u
-            %x_108:f32 = let %34
-            %36:bool = lt %x_107, %x_108
-            if %36 [t: $B8] {  # if_2
-              $B8: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            %37:f32 = access %x_93, 1u
-            %x_112:f32 = let %37
-            %39:f32 = load_vector_element %x_104, 1u
-            %x_113:f32 = let %39
-            %41:bool = lt %x_112, %x_113
-            if %41 [t: $B9] {  # if_3
-              $B9: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            %42:f32 = load_vector_element %x_104, 2u
-            %43:f32 = add %x_108, %42
-            %44:bool = gt %x_107, %43
-            if %44 [t: $B10] {  # if_4
-              $B10: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            %45:f32 = load_vector_element %x_104, 3u
-            %46:f32 = add %x_113, %45
-            %47:bool = gt %x_112, %46
-            if %47 [t: $B11] {  # if_5
-              $B11: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            store %x_127, true
-            exit_switch  # switch_1
-          }
-        }
-        %48:vec4<f32> = load %x_95
-        store %x_96, %48
-        %49:bool = load %x_127
-        if %49 [t: $B12] {  # if_6
-          $B12: {  # true
-            store %x_83, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %50:i32 = load %x_98
-            %51:ptr<function, vec4<f32>, read_write> = access %x_83, %50
-            %52:f32 = load_vector_element %51, 0u
-            %x_131:f32 = let %52
-            store %x_84, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %54:i32 = load %x_98
-            %55:ptr<function, vec4<f32>, read_write> = access %x_84, %54
-            %56:f32 = load_vector_element %55, 1u
-            %x_134:f32 = let %56
-            %58:array<vec4<f32>, 8> = load %x_81
-            %x_135:array<vec4<f32>, 8> = let %58
-            store %x_81, array<vec4<f32>, 8>(vec4<f32>(0.0f))
-            store %x_81, %x_135
-            store %x_85, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %60:i32 = call %tint_f32_to_i32, %x_131
-            %62:i32 = let %60
-            %63:i32 = call %tint_f32_to_i32, %x_134
-            %64:i32 = mul %62, %63
-            %65:i32 = load %x_98
-            %66:i32 = mul %65, 9i
-            %67:i32 = add %64, %66
-            %68:i32 = add %67, 11i
-            %69:i32 = call %tint_mod_i32, %68, 16i
-            %71:ptr<function, vec4<f32>, read_write> = access %x_85, %69
-            %72:vec4<f32> = load %71
-            store %x_143, %72
-            %73:vec4<f32> = load %x_143
-            store %x_96, %73
-            exit_if  # if_6
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %74:i32 = load %x_98
-        %75:i32 = add %74, 1i
-        store %x_99, %75
-        %76:vec4<f32> = load %x_96
-        store %x_95, %76
-        %77:i32 = load %x_99
-        store %x_98, %77
-        next_iteration  # -> $B3
-      }
-    }
-    %78:vec4<f32> = load %x_95
-    store %x_GLF_color, %78
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B13: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %81:void = call %main_1
-    %82:vec4<f32> = load %x_GLF_color
-    %83:main_out = construct %82
-    ret %83
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B14: {
-    %86:bool = eq %rhs, 0i
-    %87:bool = eq %lhs, -2147483648i
-    %88:bool = eq %rhs, -1i
-    %89:bool = and %87, %88
-    %90:bool = or %86, %89
-    %91:i32 = select %rhs, 1i, %90
-    %92:i32 = let %91
-    %93:i32 = div %lhs, %92
-    %94:i32 = mul %93, %92
-    %95:i32 = sub %lhs, %94
-    ret %95
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %97:i32 = convert %value
-    %98:bool = gte %value, -2147483648.0f
-    %99:i32 = select -2147483648i, %97, %98
-    %100:bool = lte %value, 2147483520.0f
-    %101:i32 = select 2147483647i, %99, %100
-    ret %101
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.ir.msl
deleted file mode 100644
index 4811209..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,208 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_81:ptr<function, array<vec4<f32>, 8>, read_write> = var, array<vec4<f32>, 8>(vec4<f32>(0.0f))
-    %x_82:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_83:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_84:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_85:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_95:ptr<function, vec4<f32>, read_write> = var
-    %x_95_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_98_phi:ptr<function, i32, read_write> = var
-    store %x_81, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-    %13:array<vec4<f32>, 8> = load %x_81
-    %x_86:array<vec4<f32>, 8> = let %13
-    %15:vec4<f32> = load %gl_FragCoord
-    %x_87:vec4<f32> = let %15
-    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %18:vec2<f32> = load %17
-    %x_90:vec2<f32> = let %18
-    %20:f32 = access %x_87, 0u
-    %21:f32 = access %x_87, 1u
-    %22:vec2<f32> = construct %20, %21
-    %23:vec2<f32> = div %22, %x_90
-    %24:vec2<f32> = mul %23, 32.0f
-    %25:vec2<f32> = floor %24
-    %x_93:vec2<f32> = let %25
-    store %x_95_phi, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
-    store %x_98_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_143:ptr<function, vec4<f32>, read_write> = var
-        %x_99:ptr<function, i32, read_write> = var
-        %x_127_phi:ptr<function, bool, read_write> = var
-        %x_96_phi:ptr<function, vec4<f32>, read_write> = var
-        %31:vec4<f32> = load %x_95_phi
-        store %x_95, %31
-        %32:i32 = load %x_98_phi
-        %x_98:i32 = let %32
-        %34:bool = lt %x_98, 8i
-        if %34 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %x_104:ptr<function, vec4<f32>, read_write> = var
-        store %x_82, %x_86
-        %36:ptr<function, vec4<f32>, read_write> = access %x_82, %x_98
-        %37:vec4<f32> = load %36
-        store %x_104, %37
-        switch 0u [c: (default, $B7)] {  # switch_1
-          $B7: {  # case
-            %38:f32 = access %x_93, 0u
-            %x_107:f32 = let %38
-            %40:f32 = load_vector_element %x_104, 0u
-            %x_108:f32 = let %40
-            %42:bool = lt %x_107, %x_108
-            if %42 [t: $B8] {  # if_2
-              $B8: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %43:f32 = access %x_93, 1u
-            %x_112:f32 = let %43
-            %45:f32 = load_vector_element %x_104, 1u
-            %x_113:f32 = let %45
-            %47:bool = lt %x_112, %x_113
-            if %47 [t: $B9] {  # if_3
-              $B9: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %48:f32 = load_vector_element %x_104, 2u
-            %49:f32 = add %x_108, %48
-            %50:bool = gt %x_107, %49
-            if %50 [t: $B10] {  # if_4
-              $B10: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %51:f32 = load_vector_element %x_104, 3u
-            %52:f32 = add %x_113, %51
-            %53:bool = gt %x_112, %52
-            if %53 [t: $B11] {  # if_5
-              $B11: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            store %x_127_phi, true
-            exit_switch  # switch_1
-          }
-        }
-        %54:bool = load %x_127_phi
-        %x_127:bool = let %54
-        %56:vec4<f32> = load %x_95
-        store %x_96_phi, %56
-        if %x_127 [t: $B12] {  # if_6
-          $B12: {  # true
-            store %x_83, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %57:ptr<function, vec4<f32>, read_write> = access %x_83, %x_98
-            %58:f32 = load_vector_element %57, 0u
-            %x_131:f32 = let %58
-            store %x_84, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %60:ptr<function, vec4<f32>, read_write> = access %x_84, %x_98
-            %61:f32 = load_vector_element %60, 1u
-            %x_134:f32 = let %61
-            %63:array<vec4<f32>, 8> = load %x_81
-            %x_135:array<vec4<f32>, 8> = let %63
-            store %x_81, array<vec4<f32>, 8>(vec4<f32>(0.0f))
-            store %x_81, %x_135
-            store %x_85, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %65:i32 = call %tint_f32_to_i32, %x_131
-            %67:i32 = let %65
-            %68:i32 = call %tint_f32_to_i32, %x_134
-            %69:i32 = mul %67, %68
-            %70:i32 = mul %x_98, 9i
-            %71:i32 = add %69, %70
-            %72:i32 = add %71, 11i
-            %73:i32 = call %tint_mod_i32, %72, 16i
-            %75:ptr<function, vec4<f32>, read_write> = access %x_85, %73
-            %76:vec4<f32> = load %75
-            store %x_143, %76
-            %77:vec4<f32> = load %x_143
-            store %x_96_phi, %77
-            exit_if  # if_6
-          }
-        }
-        %78:vec4<f32> = load %x_96_phi
-        %x_96:vec4<f32> = let %78
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %80:i32 = add %x_98, 1i
-        store %x_99, %80
-        store %x_95_phi, %x_96
-        %81:i32 = load %x_99
-        store %x_98_phi, %81
-        next_iteration  # -> $B3
-      }
-    }
-    %82:vec4<f32> = load %x_95
-    store %x_GLF_color, %82
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B13: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %85:void = call %main_1
-    %86:vec4<f32> = load %x_GLF_color
-    %87:main_out = construct %86
-    ret %87
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B14: {
-    %90:bool = eq %rhs, 0i
-    %91:bool = eq %lhs, -2147483648i
-    %92:bool = eq %rhs, -1i
-    %93:bool = and %91, %92
-    %94:bool = or %90, %93
-    %95:i32 = select %rhs, 1i, %94
-    %96:i32 = let %95
-    %97:i32 = div %lhs, %96
-    %98:i32 = mul %97, %96
-    %99:i32 = sub %lhs, %98
-    ret %99
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %101:i32 = convert %value
-    %102:bool = gte %value, -2147483648.0f
-    %103:i32 = select -2147483648i, %101, %102
-    %104:bool = lte %value, 2147483520.0f
-    %105:i32 = select 2147483647i, %103, %104
-    ret %105
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.ir.msl
deleted file mode 100644
index 3e3d461..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,199 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_81:ptr<function, array<vec4<f32>, 8>, read_write> = var, array<vec4<f32>, 8>(vec4<f32>(0.0f))
-    %x_82:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_83:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_84:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_85:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_95:ptr<function, vec4<f32>, read_write> = var
-    %x_98:ptr<function, i32, read_write> = var
-    store %x_81, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-    %12:array<vec4<f32>, 8> = load %x_81
-    %x_86:array<vec4<f32>, 8> = let %12
-    %14:vec4<f32> = load %gl_FragCoord
-    %15:vec2<f32> = swizzle %14, xy
-    %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %17:vec2<f32> = load %16
-    %18:vec2<f32> = div %15, %17
-    %19:vec2<f32> = mul %18, 32.0f
-    %20:vec2<f32> = floor %19
-    %x_93:vec2<f32> = let %20
-    store %x_95, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
-    store %x_98, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_127:ptr<function, bool, read_write> = var
-        %x_142:ptr<function, vec4<f32>, read_write> = var
-        %x_96:ptr<function, vec4<f32>, read_write> = var
-        %x_99:ptr<function, i32, read_write> = var
-        %26:i32 = load %x_98
-        %27:bool = lt %26, 8i
-        if %27 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %x_104:ptr<function, vec4<f32>, read_write> = var
-        store %x_82, %x_86
-        %29:i32 = load %x_98
-        %30:ptr<function, vec4<f32>, read_write> = access %x_82, %29
-        %31:vec4<f32> = load %30
-        store %x_104, %31
-        switch 0u [c: (default, $B7)] {  # switch_1
-          $B7: {  # case
-            %32:f32 = access %x_93, 0u
-            %x_107:f32 = let %32
-            %34:f32 = load_vector_element %x_104, 0u
-            %x_108:f32 = let %34
-            %36:bool = lt %x_107, %x_108
-            if %36 [t: $B8] {  # if_2
-              $B8: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            %37:f32 = access %x_93, 1u
-            %x_112:f32 = let %37
-            %39:f32 = load_vector_element %x_104, 1u
-            %x_113:f32 = let %39
-            %41:bool = lt %x_112, %x_113
-            if %41 [t: $B9] {  # if_3
-              $B9: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            %42:f32 = load_vector_element %x_104, 2u
-            %43:f32 = add %x_108, %42
-            %44:bool = gt %x_107, %43
-            if %44 [t: $B10] {  # if_4
-              $B10: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            %45:f32 = load_vector_element %x_104, 3u
-            %46:f32 = add %x_113, %45
-            %47:bool = gt %x_112, %46
-            if %47 [t: $B11] {  # if_5
-              $B11: {  # true
-                store %x_127, false
-                exit_switch  # switch_1
-              }
-            }
-            store %x_127, true
-            exit_switch  # switch_1
-          }
-        }
-        %48:vec4<f32> = load %x_95
-        store %x_96, %48
-        %49:bool = load %x_127
-        if %49 [t: $B12] {  # if_6
-          $B12: {  # true
-            store %x_83, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %50:i32 = load %x_98
-            %51:ptr<function, vec4<f32>, read_write> = access %x_83, %50
-            %52:f32 = load_vector_element %51, 0u
-            %x_131:f32 = let %52
-            store %x_84, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %54:i32 = load %x_98
-            %55:ptr<function, vec4<f32>, read_write> = access %x_84, %54
-            %56:f32 = load_vector_element %55, 1u
-            %x_134:f32 = let %56
-            store %x_85, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %58:i32 = call %tint_f32_to_i32, %x_131
-            %60:i32 = let %58
-            %61:i32 = call %tint_f32_to_i32, %x_134
-            %62:i32 = mul %60, %61
-            %63:i32 = load %x_98
-            %64:i32 = mul %63, 9i
-            %65:i32 = add %62, %64
-            %66:i32 = add %65, 11i
-            %67:i32 = call %tint_mod_i32, %66, 16i
-            %69:ptr<function, vec4<f32>, read_write> = access %x_85, %67
-            %70:vec4<f32> = load %69
-            store %x_142, %70
-            %71:vec4<f32> = load %x_142
-            store %x_96, %71
-            exit_if  # if_6
-          }
-        }
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %72:i32 = load %x_98
-        %73:i32 = add %72, 1i
-        store %x_99, %73
-        %74:vec4<f32> = load %x_96
-        store %x_95, %74
-        %75:i32 = load %x_99
-        store %x_98, %75
-        next_iteration  # -> $B3
-      }
-    }
-    %76:vec4<f32> = load %x_95
-    store %x_GLF_color, %76
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B13: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %79:void = call %main_1
-    %80:vec4<f32> = load %x_GLF_color
-    %81:main_out = construct %80
-    ret %81
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B14: {
-    %84:bool = eq %rhs, 0i
-    %85:bool = eq %lhs, -2147483648i
-    %86:bool = eq %rhs, -1i
-    %87:bool = and %85, %86
-    %88:bool = or %84, %87
-    %89:i32 = select %rhs, 1i, %88
-    %90:i32 = let %89
-    %91:i32 = div %lhs, %90
-    %92:i32 = mul %91, %90
-    %93:i32 = sub %lhs, %92
-    ret %93
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %95:i32 = convert %value
-    %96:bool = gte %value, -2147483648.0f
-    %97:i32 = select -2147483648i, %95, %96
-    %98:bool = lte %value, 2147483520.0f
-    %99:i32 = select 2147483647i, %97, %98
-    ret %99
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.ir.msl
deleted file mode 100644
index a5d0340..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/spv-stable-rects-Os-mutate-var-push-through-var/2.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,204 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_81:ptr<function, array<vec4<f32>, 8>, read_write> = var, array<vec4<f32>, 8>(vec4<f32>(0.0f))
-    %x_82:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_83:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_84:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %x_85:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %x_95:ptr<function, vec4<f32>, read_write> = var
-    %x_95_phi:ptr<function, vec4<f32>, read_write> = var
-    %x_98_phi:ptr<function, i32, read_write> = var
-    store %x_81, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-    %13:array<vec4<f32>, 8> = load %x_81
-    %x_86:array<vec4<f32>, 8> = let %13
-    %15:vec4<f32> = load %gl_FragCoord
-    %x_87:vec4<f32> = let %15
-    %17:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
-    %18:vec2<f32> = load %17
-    %x_90:vec2<f32> = let %18
-    %20:f32 = access %x_87, 0u
-    %21:f32 = access %x_87, 1u
-    %22:vec2<f32> = construct %20, %21
-    %23:vec2<f32> = div %22, %x_90
-    %24:vec2<f32> = mul %23, 32.0f
-    %25:vec2<f32> = floor %24
-    %x_93:vec2<f32> = let %25
-    store %x_95_phi, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
-    store %x_98_phi, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %x_142:ptr<function, vec4<f32>, read_write> = var
-        %x_99:ptr<function, i32, read_write> = var
-        %x_127_phi:ptr<function, bool, read_write> = var
-        %x_96_phi:ptr<function, vec4<f32>, read_write> = var
-        %31:vec4<f32> = load %x_95_phi
-        store %x_95, %31
-        %32:i32 = load %x_98_phi
-        %x_98:i32 = let %32
-        %34:bool = lt %x_98, 8i
-        if %34 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %x_104:ptr<function, vec4<f32>, read_write> = var
-        store %x_82, %x_86
-        %36:ptr<function, vec4<f32>, read_write> = access %x_82, %x_98
-        %37:vec4<f32> = load %36
-        store %x_104, %37
-        switch 0u [c: (default, $B7)] {  # switch_1
-          $B7: {  # case
-            %38:f32 = access %x_93, 0u
-            %x_107:f32 = let %38
-            %40:f32 = load_vector_element %x_104, 0u
-            %x_108:f32 = let %40
-            %42:bool = lt %x_107, %x_108
-            if %42 [t: $B8] {  # if_2
-              $B8: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %43:f32 = access %x_93, 1u
-            %x_112:f32 = let %43
-            %45:f32 = load_vector_element %x_104, 1u
-            %x_113:f32 = let %45
-            %47:bool = lt %x_112, %x_113
-            if %47 [t: $B9] {  # if_3
-              $B9: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %48:f32 = load_vector_element %x_104, 2u
-            %49:f32 = add %x_108, %48
-            %50:bool = gt %x_107, %49
-            if %50 [t: $B10] {  # if_4
-              $B10: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            %51:f32 = load_vector_element %x_104, 3u
-            %52:f32 = add %x_113, %51
-            %53:bool = gt %x_112, %52
-            if %53 [t: $B11] {  # if_5
-              $B11: {  # true
-                store %x_127_phi, false
-                exit_switch  # switch_1
-              }
-            }
-            store %x_127_phi, true
-            exit_switch  # switch_1
-          }
-        }
-        %54:bool = load %x_127_phi
-        %x_127:bool = let %54
-        %56:vec4<f32> = load %x_95
-        store %x_96_phi, %56
-        if %x_127 [t: $B12] {  # if_6
-          $B12: {  # true
-            store %x_83, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %57:ptr<function, vec4<f32>, read_write> = access %x_83, %x_98
-            %58:f32 = load_vector_element %57, 0u
-            %x_131:f32 = let %58
-            store %x_84, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %60:ptr<function, vec4<f32>, read_write> = access %x_84, %x_98
-            %61:f32 = load_vector_element %60, 1u
-            %x_134:f32 = let %61
-            store %x_85, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %63:i32 = call %tint_f32_to_i32, %x_131
-            %65:i32 = let %63
-            %66:i32 = call %tint_f32_to_i32, %x_134
-            %67:i32 = mul %65, %66
-            %68:i32 = mul %x_98, 9i
-            %69:i32 = add %67, %68
-            %70:i32 = add %69, 11i
-            %71:i32 = call %tint_mod_i32, %70, 16i
-            %73:ptr<function, vec4<f32>, read_write> = access %x_85, %71
-            %74:vec4<f32> = load %73
-            store %x_142, %74
-            %75:vec4<f32> = load %x_142
-            store %x_96_phi, %75
-            exit_if  # if_6
-          }
-        }
-        %76:vec4<f32> = load %x_96_phi
-        %x_96:vec4<f32> = let %76
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        %78:i32 = add %x_98, 1i
-        store %x_99, %78
-        store %x_95_phi, %x_96
-        %79:i32 = load %x_99
-        store %x_98_phi, %79
-        next_iteration  # -> $B3
-      }
-    }
-    %80:vec4<f32> = load %x_95
-    store %x_GLF_color, %80
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B13: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %83:void = call %main_1
-    %84:vec4<f32> = load %x_GLF_color
-    %85:main_out = construct %84
-    ret %85
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B14: {
-    %88:bool = eq %rhs, 0i
-    %89:bool = eq %lhs, -2147483648i
-    %90:bool = eq %rhs, -1i
-    %91:bool = and %89, %90
-    %92:bool = or %88, %91
-    %93:i32 = select %rhs, 1i, %92
-    %94:i32 = let %93
-    %95:i32 = div %lhs, %94
-    %96:i32 = mul %95, %94
-    %97:i32 = sub %lhs, %96
-    ret %97
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B15: {
-    %99:i32 = convert %value
-    %100:bool = gte %value, -2147483648.0f
-    %101:i32 = select -2147483648i, %99, %100
-    %102:bool = lte %value, 2147483520.0f
-    %103:i32 = select 2147483647i, %101, %102
-    ret %103
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.ir.msl
deleted file mode 100644
index 21e6e74..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,477 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
-  numbers:array<i32, 10> @offset(0)
-}
-
-BST = struct @align(4) {
-  data:i32 @offset(0)
-  leftIndex:i32 @offset(4)
-  rightIndex:i32 @offset(8)
-}
-
-buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %obj:ptr<private, QuicksortObject, read_write> = var
-  %tree:ptr<private, array<BST, 10>, read_write> = var
-  %x_50:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%node:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
-  $B2: {
-    %8:ptr<function, i32, read_write> = access %node, 0u
-    %9:i32 = load %data
-    store %8, %9
-    %10:ptr<function, i32, read_write> = access %node, 1u
-    store %10, -1i
-    %11:ptr<function, i32, read_write> = access %node, 2u
-    store %11, -1i
-    ret
-  }
-}
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void {
-  $B3: {
-    %baseIndex:ptr<function, i32, read_write> = var
-    %param:ptr<function, BST, read_write> = var
-    %param_1:ptr<function, i32, read_write> = var
-    %param_2:ptr<function, BST, read_write> = var
-    %param_3:ptr<function, i32, read_write> = var
-    store %baseIndex, 0i
-    loop [b: $B4, c: $B5] {  # loop_1
-      $B4: {  # body
-        %20:i32 = load %baseIndex
-        %21:i32 = load %treeIndex
-        %22:bool = lte %20, %21
-        if %22 [t: $B6, f: $B7] {  # if_1
-          $B6: {  # true
-            exit_if  # if_1
-          }
-          $B7: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %23:i32 = load %data_1
-        %24:i32 = load %baseIndex
-        %25:ptr<private, i32, read_write> = access %tree, %24, 0u
-        %26:i32 = load %25
-        %27:bool = lte %23, %26
-        if %27 [t: $B8, f: $B9] {  # if_2
-          $B8: {  # true
-            %28:i32 = load %baseIndex
-            %29:ptr<private, i32, read_write> = access %tree, %28, 1u
-            %30:i32 = load %29
-            %31:bool = eq %30, -1i
-            if %31 [t: $B10, f: $B11] {  # if_3
-              $B10: {  # true
-                %32:i32 = load %baseIndex
-                %x_236:i32 = let %32
-                %34:ptr<private, i32, read_write> = access %tree, %x_236, 1u
-                %35:i32 = load %treeIndex
-                store %34, %35
-                %36:i32 = load %treeIndex
-                %x_239:i32 = let %36
-                %38:ptr<private, BST, read_write> = access %tree, %x_239
-                %39:BST = load %38
-                store %param, %39
-                %40:i32 = load %data_1
-                store %param_1, %40
-                %41:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                %42:ptr<private, BST, read_write> = access %tree, %x_239
-                %43:BST = load %param
-                store %42, %43
-                ret
-              }
-              $B11: {  # false
-                %44:i32 = load %baseIndex
-                %45:ptr<private, i32, read_write> = access %tree, %44, 1u
-                %46:i32 = load %45
-                store %baseIndex, %46
-                continue  # -> $B5
-              }
-            }
-            exit_if  # if_2
-          }
-          $B9: {  # false
-            %47:i32 = load %baseIndex
-            %48:ptr<private, i32, read_write> = access %tree, %47, 2u
-            %49:i32 = load %48
-            %50:bool = eq %49, -1i
-            if %50 [t: $B12, f: $B13] {  # if_4
-              $B12: {  # true
-                %51:i32 = load %baseIndex
-                %x_256:i32 = let %51
-                %53:ptr<private, i32, read_write> = access %tree, %x_256, 2u
-                %54:i32 = load %treeIndex
-                store %53, %54
-                %55:i32 = load %treeIndex
-                %x_259:i32 = let %55
-                %57:ptr<private, BST, read_write> = access %tree, %x_259
-                %58:BST = load %57
-                store %param_2, %58
-                %59:i32 = load %data_1
-                store %param_3, %59
-                %60:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
-                %61:ptr<private, BST, read_write> = access %tree, %x_259
-                %62:BST = load %param_2
-                store %61, %62
-                ret
-              }
-              $B13: {  # false
-                %63:i32 = load %baseIndex
-                %64:ptr<private, i32, read_write> = access %tree, %63, 2u
-                %65:i32 = load %64
-                store %baseIndex, %65
-                continue  # -> $B5
-              }
-            }
-            exit_if  # if_2
-          }
-        }
-        unreachable
-      }
-      $B5: {  # continuing
-        next_iteration  # -> $B4
-      }
-    }
-    ret
-  }
-}
-%identity_i1_ = func(%a:ptr<function, i32, read_write>):i32 {
-  $B14: {
-    %68:i32 = load %a
-    %x_202:i32 = let %68
-    %70:ptr<private, i32, read_write> = access %obj, 0u, %x_202
-    %71:i32 = load %a
-    store %70, %71
-    %72:ptr<private, i32, read_write> = access %obj, 0u, 2i
-    %73:i32 = load %72
-    %x_206:i32 = let %73
-    ret %x_206
-  }
-}
-%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
-  $B15: {
-    %index:ptr<function, i32, read_write> = var
-    %currentNode:ptr<function, BST, read_write> = var
-    %x_270:ptr<function, i32, read_write> = var
-    store %index, 0i
-    loop [b: $B16, c: $B17] {  # loop_2
-      $B16: {  # body
-        %80:i32 = load %index
-        %81:bool = neq %80, -1i
-        if %81 [t: $B18, f: $B19] {  # if_5
-          $B18: {  # true
-            exit_if  # if_5
-          }
-          $B19: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        %82:i32 = load %index
-        %83:ptr<private, BST, read_write> = access %tree, %82
-        %84:BST = load %83
-        store %currentNode, %84
-        %85:ptr<function, i32, read_write> = access %currentNode, 0u
-        %86:i32 = load %85
-        %87:i32 = load %t
-        %88:bool = eq %86, %87
-        if %88 [t: $B20] {  # if_6
-          $B20: {  # true
-            %89:i32 = load %t
-            %x_287:i32 = let %89
-            ret %x_287
-          }
-        }
-        %91:i32 = load %t
-        %92:ptr<function, i32, read_write> = access %currentNode, 0u
-        %93:i32 = load %92
-        %94:bool = gt %91, %93
-        if %94 [t: $B21, f: $B22] {  # if_7
-          $B21: {  # true
-            %95:ptr<function, i32, read_write> = access %currentNode, 2u
-            %96:i32 = load %95
-            store %x_270, %96
-            exit_if  # if_7
-          }
-          $B22: {  # false
-            %97:ptr<function, i32, read_write> = access %currentNode, 1u
-            %98:i32 = load %97
-            store %x_270, %98
-            exit_if  # if_7
-          }
-        }
-        %99:i32 = load %x_270
-        store %index, %99
-        continue  # -> $B17
-      }
-      $B17: {  # continuing
-        next_iteration  # -> $B16
-      }
-    }
-    ret -1i
-  }
-}
-%main_1 = func():void {
-  $B23: {
-    %treeIndex_1:ptr<function, i32, read_write> = var
-    %param_4:ptr<function, BST, read_write> = var
-    %param_5:ptr<function, i32, read_write> = var
-    %param_6:ptr<function, i32, read_write> = var
-    %param_7:ptr<function, i32, read_write> = var
-    %param_8:ptr<function, i32, read_write> = var
-    %param_9:ptr<function, i32, read_write> = var
-    %param_10:ptr<function, i32, read_write> = var
-    %param_11:ptr<function, i32, read_write> = var
-    %param_12:ptr<function, i32, read_write> = var
-    %param_13:ptr<function, i32, read_write> = var
-    %param_14:ptr<function, i32, read_write> = var
-    %param_15:ptr<function, i32, read_write> = var
-    %param_16:ptr<function, i32, read_write> = var
-    %param_17:ptr<function, i32, read_write> = var
-    %param_18:ptr<function, i32, read_write> = var
-    %param_19:ptr<function, i32, read_write> = var
-    %param_20:ptr<function, i32, read_write> = var
-    %param_21:ptr<function, i32, read_write> = var
-    %param_22:ptr<function, i32, read_write> = var
-    %param_23:ptr<function, i32, read_write> = var
-    %pp:ptr<function, i32, read_write> = var
-    %looplimiter0:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %param_24:ptr<function, i32, read_write> = var
-    %count:ptr<function, i32, read_write> = var
-    %i_1:ptr<function, i32, read_write> = var
-    %result:ptr<function, i32, read_write> = var
-    %param_25:ptr<function, i32, read_write> = var
-    store %treeIndex_1, 0i
-    %130:ptr<private, BST, read_write> = access %tree, 0i
-    %131:BST = load %130
-    store %param_4, %131
-    store %param_5, 9i
-    %132:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
-    %133:ptr<private, BST, read_write> = access %tree, 0i
-    %134:BST = load %param_4
-    store %133, %134
-    %135:i32 = load %treeIndex_1
-    %136:i32 = add %135, 1i
-    store %treeIndex_1, %136
-    %137:i32 = load %treeIndex_1
-    store %param_6, %137
-    store %param_7, 5i
-    %138:void = call %insert_i1_i1_, %param_6, %param_7
-    %139:i32 = load %treeIndex_1
-    %140:i32 = add %139, 1i
-    store %treeIndex_1, %140
-    %141:i32 = load %treeIndex_1
-    store %param_8, %141
-    store %param_9, 12i
-    %142:void = call %insert_i1_i1_, %param_8, %param_9
-    %143:i32 = load %treeIndex_1
-    %144:i32 = add %143, 1i
-    store %treeIndex_1, %144
-    %145:i32 = load %treeIndex_1
-    store %param_10, %145
-    store %param_11, 15i
-    %146:void = call %insert_i1_i1_, %param_10, %param_11
-    %147:i32 = load %treeIndex_1
-    %148:i32 = add %147, 1i
-    store %treeIndex_1, %148
-    %149:i32 = load %treeIndex_1
-    store %param_12, %149
-    store %param_13, 7i
-    %150:void = call %insert_i1_i1_, %param_12, %param_13
-    %151:i32 = load %treeIndex_1
-    %152:i32 = add %151, 1i
-    store %treeIndex_1, %152
-    %153:i32 = load %treeIndex_1
-    store %param_14, %153
-    store %param_15, 8i
-    %154:void = call %insert_i1_i1_, %param_14, %param_15
-    %155:i32 = load %treeIndex_1
-    %156:i32 = add %155, 1i
-    store %treeIndex_1, %156
-    %157:i32 = load %treeIndex_1
-    store %param_16, %157
-    store %param_17, 2i
-    %158:void = call %insert_i1_i1_, %param_16, %param_17
-    %159:i32 = load %treeIndex_1
-    %160:i32 = add %159, 1i
-    store %treeIndex_1, %160
-    %161:i32 = load %treeIndex_1
-    store %param_18, %161
-    store %param_19, 6i
-    %162:void = call %insert_i1_i1_, %param_18, %param_19
-    %163:i32 = load %treeIndex_1
-    %164:i32 = add %163, 1i
-    store %treeIndex_1, %164
-    %165:i32 = load %treeIndex_1
-    store %param_20, %165
-    store %param_21, 17i
-    %166:void = call %insert_i1_i1_, %param_20, %param_21
-    %167:i32 = load %treeIndex_1
-    %168:i32 = add %167, 1i
-    store %treeIndex_1, %168
-    %169:i32 = load %treeIndex_1
-    store %param_22, %169
-    store %param_23, 13i
-    %170:void = call %insert_i1_i1_, %param_22, %param_23
-    store %pp, 0i
-    store %looplimiter0, 0i
-    store %i, 0i
-    loop [b: $B24, c: $B25] {  # loop_3
-      $B24: {  # body
-        %171:i32 = load %i
-        %172:bool = lt %171, 10000i
-        if %172 [t: $B26, f: $B27] {  # if_8
-          $B26: {  # true
-            exit_if  # if_8
-          }
-          $B27: {  # false
-            exit_loop  # loop_3
-          }
-        }
-        %173:i32 = load %looplimiter0
-        %174:i32 = let %173
-        %175:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-        %176:f32 = load_vector_element %175, 1u
-        %177:i32 = call %tint_f32_to_i32, %176
-        %179:bool = gte %174, %177
-        if %179 [t: $B28] {  # if_9
-          $B28: {  # true
-            %180:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-            %181:f32 = load_vector_element %180, 1u
-            %182:i32 = call %tint_f32_to_i32, %181
-            %183:i32 = add 1i, %182
-            store %param_24, %183
-            %184:i32 = call %identity_i1_, %param_24
-            %x_159:i32 = let %184
-            store %pp, %x_159
-            exit_loop  # loop_3
-          }
-        }
-        %186:i32 = load %looplimiter0
-        %187:i32 = add %186, 1i
-        store %looplimiter0, %187
-        continue  # -> $B25
-      }
-      $B25: {  # continuing
-        %188:i32 = load %i
-        %189:i32 = add %188, 1i
-        store %i, %189
-        next_iteration  # -> $B24
-      }
-    }
-    %190:i32 = load %pp
-    %191:bool = neq %190, 2i
-    if %191 [t: $B29] {  # if_10
-      $B29: {  # true
-        ret
-      }
-    }
-    store %count, 0i
-    store %i_1, 0i
-    loop [b: $B30, c: $B31] {  # loop_4
-      $B30: {  # body
-        %192:i32 = load %i_1
-        %193:bool = lt %192, 20i
-        if %193 [t: $B32, f: $B33] {  # if_11
-          $B32: {  # true
-            exit_if  # if_11
-          }
-          $B33: {  # false
-            exit_loop  # loop_4
-          }
-        }
-        %194:i32 = load %i_1
-        store %param_25, %194
-        %195:i32 = call %search_i1_, %param_25
-        %x_176:i32 = let %195
-        store %result, %x_176
-        %197:i32 = load %i_1
-        %x_177:i32 = let %197
-        switch %x_177 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B34), c: (default, $B35)] {  # switch_1
-          $B34: {  # case
-            %199:i32 = load %result
-            %200:i32 = load %i_1
-            %201:bool = eq %199, %200
-            if %201 [t: $B36] {  # if_12
-              $B36: {  # true
-                %202:i32 = load %count
-                %203:i32 = add %202, 1i
-                store %count, %203
-                exit_if  # if_12
-              }
-            }
-            exit_switch  # switch_1
-          }
-          $B35: {  # case
-            %204:i32 = load %result
-            %205:bool = eq %204, -1i
-            if %205 [t: $B37] {  # if_13
-              $B37: {  # true
-                %206:i32 = load %count
-                %207:i32 = add %206, 1i
-                store %count, %207
-                exit_if  # if_13
-              }
-            }
-            exit_switch  # switch_1
-          }
-        }
-        continue  # -> $B31
-      }
-      $B31: {  # continuing
-        %208:i32 = load %i_1
-        %209:i32 = add %208, 1i
-        store %i_1, %209
-        next_iteration  # -> $B30
-      }
-    }
-    %210:i32 = load %count
-    %211:bool = eq %210, 20i
-    if %211 [t: $B38, f: $B39] {  # if_14
-      $B38: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_14
-      }
-      $B39: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
-        exit_if  # if_14
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B40: {
-    %213:void = call %main_1
-    %214:vec4<f32> = load %x_GLF_color
-    %215:main_out = construct %214
-    ret %215
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B41: {
-    %217:i32 = convert %value
-    %218:bool = gte %value, -2147483648.0f
-    %219:i32 = select -2147483648i, %217, %218
-    %220:bool = lte %value, 2147483520.0f
-    %221:i32 = select 2147483647i, %219, %220
-    ret %221
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.ir.msl
deleted file mode 100644
index 488bcf2..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,545 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: QuicksortObject = struct @align(4) {
-  numbers:array<i32, 10> @offset(0)
-}
-
-BST = struct @align(4) {
-  data:i32 @offset(0)
-  leftIndex:i32 @offset(4)
-  rightIndex:i32 @offset(8)
-}
-
-buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %obj:ptr<private, QuicksortObject, read_write> = var
-  %tree:ptr<private, array<BST, 10>, read_write> = var
-  %x_50:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%makeTreeNode_struct_BST_i1_i1_i11_i1_ = func(%node:ptr<function, BST, read_write>, %data:ptr<function, i32, read_write>):void {
-  $B2: {
-    %8:i32 = load %data
-    %x_208:i32 = let %8
-    %10:ptr<function, i32, read_write> = access %node, 0u
-    store %10, %x_208
-    %11:ptr<function, i32, read_write> = access %node, 1u
-    store %11, -1i
-    %12:ptr<function, i32, read_write> = access %node, 2u
-    store %12, -1i
-    ret
-  }
-}
-%insert_i1_i1_ = func(%treeIndex:ptr<function, i32, read_write>, %data_1:ptr<function, i32, read_write>):void {
-  $B3: {
-    %baseIndex:ptr<function, i32, read_write> = var
-    %param:ptr<function, BST, read_write> = var
-    %param_1:ptr<function, i32, read_write> = var
-    %param_2:ptr<function, BST, read_write> = var
-    %param_3:ptr<function, i32, read_write> = var
-    store %baseIndex, 0i
-    loop [b: $B4, c: $B5] {  # loop_1
-      $B4: {  # body
-        %21:i32 = load %baseIndex
-        %x_217:i32 = let %21
-        %23:i32 = load %treeIndex
-        %x_218:i32 = let %23
-        %25:bool = lte %x_217, %x_218
-        if %25 [t: $B6, f: $B7] {  # if_1
-          $B6: {  # true
-            exit_if  # if_1
-          }
-          $B7: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %26:i32 = load %data_1
-        %x_221:i32 = let %26
-        %28:i32 = load %baseIndex
-        %x_222:i32 = let %28
-        %30:ptr<private, i32, read_write> = access %tree, %x_222, 0u
-        %31:i32 = load %30
-        %x_224:i32 = let %31
-        %33:bool = lte %x_221, %x_224
-        if %33 [t: $B8, f: $B9] {  # if_2
-          $B8: {  # true
-            %34:i32 = load %baseIndex
-            %x_229:i32 = let %34
-            %36:ptr<private, i32, read_write> = access %tree, %x_229, 1u
-            %37:i32 = load %36
-            %x_231:i32 = let %37
-            %39:bool = eq %x_231, -1i
-            if %39 [t: $B10, f: $B11] {  # if_3
-              $B10: {  # true
-                %40:i32 = load %baseIndex
-                %x_236:i32 = let %40
-                %42:i32 = load %treeIndex
-                %x_237:i32 = let %42
-                %44:ptr<private, i32, read_write> = access %tree, %x_236, 1u
-                store %44, %x_237
-                %45:i32 = load %treeIndex
-                %x_239:i32 = let %45
-                %47:ptr<private, BST, read_write> = access %tree, %x_239
-                %48:BST = load %47
-                %x_241:BST = let %48
-                store %param, %x_241
-                %50:i32 = load %data_1
-                %x_242:i32 = let %50
-                store %param_1, %x_242
-                %52:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param, %param_1
-                %53:BST = load %param
-                %x_244:BST = let %53
-                %55:ptr<private, BST, read_write> = access %tree, %x_239
-                store %55, %x_244
-                ret
-              }
-              $B11: {  # false
-                %56:i32 = load %baseIndex
-                %x_246:i32 = let %56
-                %58:ptr<private, i32, read_write> = access %tree, %x_246, 1u
-                %59:i32 = load %58
-                %x_248:i32 = let %59
-                store %baseIndex, %x_248
-                continue  # -> $B5
-              }
-            }
-            exit_if  # if_2
-          }
-          $B9: {  # false
-            %61:i32 = load %baseIndex
-            %x_249:i32 = let %61
-            %63:ptr<private, i32, read_write> = access %tree, %x_249, 2u
-            %64:i32 = load %63
-            %x_251:i32 = let %64
-            %66:bool = eq %x_251, -1i
-            if %66 [t: $B12, f: $B13] {  # if_4
-              $B12: {  # true
-                %67:i32 = load %baseIndex
-                %x_256:i32 = let %67
-                %69:i32 = load %treeIndex
-                %x_257:i32 = let %69
-                %71:ptr<private, i32, read_write> = access %tree, %x_256, 2u
-                store %71, %x_257
-                %72:i32 = load %treeIndex
-                %x_259:i32 = let %72
-                %74:ptr<private, BST, read_write> = access %tree, %x_259
-                %75:BST = load %74
-                %x_261:BST = let %75
-                store %param_2, %x_261
-                %77:i32 = load %data_1
-                %x_262:i32 = let %77
-                store %param_3, %x_262
-                %79:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_2, %param_3
-                %80:BST = load %param_2
-                %x_264:BST = let %80
-                %82:ptr<private, BST, read_write> = access %tree, %x_259
-                store %82, %x_264
-                ret
-              }
-              $B13: {  # false
-                %83:i32 = load %baseIndex
-                %x_266:i32 = let %83
-                %85:ptr<private, i32, read_write> = access %tree, %x_266, 2u
-                %86:i32 = load %85
-                %x_268:i32 = let %86
-                store %baseIndex, %x_268
-                continue  # -> $B5
-              }
-            }
-            exit_if  # if_2
-          }
-        }
-        unreachable
-      }
-      $B5: {  # continuing
-        next_iteration  # -> $B4
-      }
-    }
-    ret
-  }
-}
-%identity_i1_ = func(%a:ptr<function, i32, read_write>):i32 {
-  $B14: {
-    %90:i32 = load %a
-    %x_202:i32 = let %90
-    %92:i32 = load %a
-    %x_203:i32 = let %92
-    %94:ptr<private, i32, read_write> = access %obj, 0u, %x_202
-    store %94, %x_203
-    %95:ptr<private, i32, read_write> = access %obj, 0u, 2i
-    %96:i32 = load %95
-    %x_206:i32 = let %96
-    ret %x_206
-  }
-}
-%search_i1_ = func(%t:ptr<function, i32, read_write>):i32 {
-  $B15: {
-    %index:ptr<function, i32, read_write> = var
-    %currentNode:ptr<function, BST, read_write> = var
-    %x_270:ptr<function, i32, read_write> = var
-    store %index, 0i
-    loop [b: $B16, c: $B17] {  # loop_2
-      $B16: {  # body
-        %103:i32 = load %index
-        %x_275:i32 = let %103
-        %105:bool = neq %x_275, -1i
-        if %105 [t: $B18, f: $B19] {  # if_5
-          $B18: {  # true
-            exit_if  # if_5
-          }
-          $B19: {  # false
-            exit_loop  # loop_2
-          }
-        }
-        %106:i32 = load %index
-        %x_278:i32 = let %106
-        %108:ptr<private, BST, read_write> = access %tree, %x_278
-        %109:BST = load %108
-        %x_280:BST = let %109
-        store %currentNode, %x_280
-        %111:ptr<function, i32, read_write> = access %currentNode, 0u
-        %112:i32 = load %111
-        %x_282:i32 = let %112
-        %114:i32 = load %t
-        %x_283:i32 = let %114
-        %116:bool = eq %x_282, %x_283
-        if %116 [t: $B20] {  # if_6
-          $B20: {  # true
-            %117:i32 = load %t
-            %x_287:i32 = let %117
-            ret %x_287
-          }
-        }
-        %119:i32 = load %t
-        %x_288:i32 = let %119
-        %121:ptr<function, i32, read_write> = access %currentNode, 0u
-        %122:i32 = load %121
-        %x_290:i32 = let %122
-        %124:bool = gt %x_288, %x_290
-        if %124 [t: $B21, f: $B22] {  # if_7
-          $B21: {  # true
-            %125:ptr<function, i32, read_write> = access %currentNode, 2u
-            %126:i32 = load %125
-            %x_296:i32 = let %126
-            store %x_270, %x_296
-            exit_if  # if_7
-          }
-          $B22: {  # false
-            %128:ptr<function, i32, read_write> = access %currentNode, 1u
-            %129:i32 = load %128
-            %x_298:i32 = let %129
-            store %x_270, %x_298
-            exit_if  # if_7
-          }
-        }
-        %131:i32 = load %x_270
-        %x_299:i32 = let %131
-        store %index, %x_299
-        continue  # -> $B17
-      }
-      $B17: {  # continuing
-        next_iteration  # -> $B16
-      }
-    }
-    ret -1i
-  }
-}
-%main_1 = func():void {
-  $B23: {
-    %treeIndex_1:ptr<function, i32, read_write> = var
-    %param_4:ptr<function, BST, read_write> = var
-    %param_5:ptr<function, i32, read_write> = var
-    %param_6:ptr<function, i32, read_write> = var
-    %param_7:ptr<function, i32, read_write> = var
-    %param_8:ptr<function, i32, read_write> = var
-    %param_9:ptr<function, i32, read_write> = var
-    %param_10:ptr<function, i32, read_write> = var
-    %param_11:ptr<function, i32, read_write> = var
-    %param_12:ptr<function, i32, read_write> = var
-    %param_13:ptr<function, i32, read_write> = var
-    %param_14:ptr<function, i32, read_write> = var
-    %param_15:ptr<function, i32, read_write> = var
-    %param_16:ptr<function, i32, read_write> = var
-    %param_17:ptr<function, i32, read_write> = var
-    %param_18:ptr<function, i32, read_write> = var
-    %param_19:ptr<function, i32, read_write> = var
-    %param_20:ptr<function, i32, read_write> = var
-    %param_21:ptr<function, i32, read_write> = var
-    %param_22:ptr<function, i32, read_write> = var
-    %param_23:ptr<function, i32, read_write> = var
-    %pp:ptr<function, i32, read_write> = var
-    %looplimiter0:ptr<function, i32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %param_24:ptr<function, i32, read_write> = var
-    %count:ptr<function, i32, read_write> = var
-    %i_1:ptr<function, i32, read_write> = var
-    %result:ptr<function, i32, read_write> = var
-    %param_25:ptr<function, i32, read_write> = var
-    store %treeIndex_1, 0i
-    %163:ptr<private, BST, read_write> = access %tree, 0i
-    %164:BST = load %163
-    %x_101:BST = let %164
-    store %param_4, %x_101
-    store %param_5, 9i
-    %166:void = call %makeTreeNode_struct_BST_i1_i1_i11_i1_, %param_4, %param_5
-    %167:BST = load %param_4
-    %x_103:BST = let %167
-    %169:ptr<private, BST, read_write> = access %tree, 0i
-    store %169, %x_103
-    %170:i32 = load %treeIndex_1
-    %x_105:i32 = let %170
-    %172:i32 = add %x_105, 1i
-    store %treeIndex_1, %172
-    %173:i32 = load %treeIndex_1
-    %x_107:i32 = let %173
-    store %param_6, %x_107
-    store %param_7, 5i
-    %175:void = call %insert_i1_i1_, %param_6, %param_7
-    %176:i32 = load %treeIndex_1
-    %x_109:i32 = let %176
-    %178:i32 = add %x_109, 1i
-    store %treeIndex_1, %178
-    %179:i32 = load %treeIndex_1
-    %x_111:i32 = let %179
-    store %param_8, %x_111
-    store %param_9, 12i
-    %181:void = call %insert_i1_i1_, %param_8, %param_9
-    %182:i32 = load %treeIndex_1
-    %x_113:i32 = let %182
-    %184:i32 = add %x_113, 1i
-    store %treeIndex_1, %184
-    %185:i32 = load %treeIndex_1
-    %x_115:i32 = let %185
-    store %param_10, %x_115
-    store %param_11, 15i
-    %187:void = call %insert_i1_i1_, %param_10, %param_11
-    %188:i32 = load %treeIndex_1
-    %x_117:i32 = let %188
-    %190:i32 = add %x_117, 1i
-    store %treeIndex_1, %190
-    %191:i32 = load %treeIndex_1
-    %x_119:i32 = let %191
-    store %param_12, %x_119
-    store %param_13, 7i
-    %193:void = call %insert_i1_i1_, %param_12, %param_13
-    %194:i32 = load %treeIndex_1
-    %x_121:i32 = let %194
-    %196:i32 = add %x_121, 1i
-    store %treeIndex_1, %196
-    %197:i32 = load %treeIndex_1
-    %x_123:i32 = let %197
-    store %param_14, %x_123
-    store %param_15, 8i
-    %199:void = call %insert_i1_i1_, %param_14, %param_15
-    %200:i32 = load %treeIndex_1
-    %x_125:i32 = let %200
-    %202:i32 = add %x_125, 1i
-    store %treeIndex_1, %202
-    %203:i32 = load %treeIndex_1
-    %x_127:i32 = let %203
-    store %param_16, %x_127
-    store %param_17, 2i
-    %205:void = call %insert_i1_i1_, %param_16, %param_17
-    %206:i32 = load %treeIndex_1
-    %x_129:i32 = let %206
-    %208:i32 = add %x_129, 1i
-    store %treeIndex_1, %208
-    %209:i32 = load %treeIndex_1
-    %x_131:i32 = let %209
-    store %param_18, %x_131
-    store %param_19, 6i
-    %211:void = call %insert_i1_i1_, %param_18, %param_19
-    %212:i32 = load %treeIndex_1
-    %x_133:i32 = let %212
-    %214:i32 = add %x_133, 1i
-    store %treeIndex_1, %214
-    %215:i32 = load %treeIndex_1
-    %x_135:i32 = let %215
-    store %param_20, %x_135
-    store %param_21, 17i
-    %217:void = call %insert_i1_i1_, %param_20, %param_21
-    %218:i32 = load %treeIndex_1
-    %x_137:i32 = let %218
-    %220:i32 = add %x_137, 1i
-    store %treeIndex_1, %220
-    %221:i32 = load %treeIndex_1
-    %x_139:i32 = let %221
-    store %param_22, %x_139
-    store %param_23, 13i
-    %223:void = call %insert_i1_i1_, %param_22, %param_23
-    store %pp, 0i
-    store %looplimiter0, 0i
-    store %i, 0i
-    loop [b: $B24, c: $B25] {  # loop_3
-      $B24: {  # body
-        %224:i32 = load %i
-        %x_145:i32 = let %224
-        %226:bool = lt %x_145, 10000i
-        if %226 [t: $B26, f: $B27] {  # if_8
-          $B26: {  # true
-            exit_if  # if_8
-          }
-          $B27: {  # false
-            exit_loop  # loop_3
-          }
-        }
-        %227:i32 = load %looplimiter0
-        %x_148:i32 = let %227
-        %229:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-        %230:f32 = load_vector_element %229, 1u
-        %x_150:f32 = let %230
-        %232:i32 = call %tint_f32_to_i32, %x_150
-        %234:bool = gte %x_148, %232
-        if %234 [t: $B28] {  # if_9
-          $B28: {  # true
-            %235:ptr<uniform, vec2<f32>, read> = access %x_50, 0u
-            %236:f32 = load_vector_element %235, 1u
-            %x_156:f32 = let %236
-            %238:i32 = call %tint_f32_to_i32, %x_156
-            %239:i32 = add 1i, %238
-            store %param_24, %239
-            %240:i32 = call %identity_i1_, %param_24
-            %x_159:i32 = let %240
-            store %pp, %x_159
-            exit_loop  # loop_3
-          }
-        }
-        %242:i32 = load %looplimiter0
-        %x_160:i32 = let %242
-        %244:i32 = add %x_160, 1i
-        store %looplimiter0, %244
-        continue  # -> $B25
-      }
-      $B25: {  # continuing
-        %245:i32 = load %i
-        %x_162:i32 = let %245
-        %247:i32 = add %x_162, 1i
-        store %i, %247
-        next_iteration  # -> $B24
-      }
-    }
-    %248:i32 = load %pp
-    %x_164:i32 = let %248
-    %250:bool = neq %x_164, 2i
-    if %250 [t: $B29] {  # if_10
-      $B29: {  # true
-        ret
-      }
-    }
-    store %count, 0i
-    store %i_1, 0i
-    loop [b: $B30, c: $B31] {  # loop_4
-      $B30: {  # body
-        %251:i32 = load %i_1
-        %x_172:i32 = let %251
-        %253:bool = lt %x_172, 20i
-        if %253 [t: $B32, f: $B33] {  # if_11
-          $B32: {  # true
-            exit_if  # if_11
-          }
-          $B33: {  # false
-            exit_loop  # loop_4
-          }
-        }
-        %254:i32 = load %i_1
-        %x_175:i32 = let %254
-        store %param_25, %x_175
-        %256:i32 = call %search_i1_, %param_25
-        %x_176:i32 = let %256
-        store %result, %x_176
-        %258:i32 = load %i_1
-        %x_177:i32 = let %258
-        switch %x_177 [c: (2i 5i 6i 7i 8i 9i 12i 13i 15i 17i, $B34), c: (default, $B35)] {  # switch_1
-          $B34: {  # case
-            %260:i32 = load %result
-            %x_187:i32 = let %260
-            %262:i32 = load %i_1
-            %x_188:i32 = let %262
-            %264:bool = eq %x_187, %x_188
-            if %264 [t: $B36] {  # if_12
-              $B36: {  # true
-                %265:i32 = load %count
-                %x_192:i32 = let %265
-                %267:i32 = add %x_192, 1i
-                store %count, %267
-                exit_if  # if_12
-              }
-            }
-            exit_switch  # switch_1
-          }
-          $B35: {  # case
-            %268:i32 = load %result
-            %x_181:i32 = let %268
-            %270:bool = eq %x_181, -1i
-            if %270 [t: $B37] {  # if_13
-              $B37: {  # true
-                %271:i32 = load %count
-                %x_185:i32 = let %271
-                %273:i32 = add %x_185, 1i
-                store %count, %273
-                exit_if  # if_13
-              }
-            }
-            exit_switch  # switch_1
-          }
-        }
-        continue  # -> $B31
-      }
-      $B31: {  # continuing
-        %274:i32 = load %i_1
-        %x_194:i32 = let %274
-        %276:i32 = add %x_194, 1i
-        store %i_1, %276
-        next_iteration  # -> $B30
-      }
-    }
-    %277:i32 = load %count
-    %x_196:i32 = let %277
-    %279:bool = eq %x_196, 20i
-    if %279 [t: $B38, f: $B39] {  # if_14
-      $B38: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_14
-      }
-      $B39: {  # false
-        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f)
-        exit_if  # if_14
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B40: {
-    %281:void = call %main_1
-    %282:vec4<f32> = load %x_GLF_color
-    %283:main_out = construct %282
-    ret %283
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B41: {
-    %285:i32 = convert %value
-    %286:bool = gte %value, -2147483648.0f
-    %287:i32 = select -2147483648i, %285, %286
-    %288:bool = lte %value, 2147483520.0f
-    %289:i32 = select 2147483647i, %287, %288
-    ret %289
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.ir.msl
deleted file mode 100644
index c3c1389..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,154 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%collatz_i1_ = func(%v:ptr<function, i32, read_write>):i32 {
-  $B2: {
-    %count:ptr<function, i32, read_write> = var
-    store %count, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %7:i32 = load %v
-        %8:bool = gt %7, 1i
-        if %8 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %9:i32 = load %v
-        %10:i32 = and %9, 1i
-        %11:bool = eq %10, 1i
-        if %11 [t: $B7, f: $B8] {  # if_2
-          $B7: {  # true
-            %12:i32 = load %v
-            %13:i32 = mul 3i, %12
-            %14:i32 = add %13, 1i
-            store %v, %14
-            exit_if  # if_2
-          }
-          $B8: {  # false
-            %15:i32 = load %v
-            %16:i32 = call %tint_div_i32, %15, 2i
-            store %v, %16
-            exit_if  # if_2
-          }
-        }
-        %18:i32 = load %count
-        %19:i32 = add %18, 1i
-        store %count, %19
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        next_iteration  # -> $B3
-      }
-    }
-    %20:i32 = load %count
-    %x_105:i32 = let %20
-    ret %x_105
-  }
-}
-%main_1 = func():void {
-  $B9: {
-    %lin:ptr<function, vec2<f32>, read_write> = var
-    %v_1:ptr<function, i32, read_write> = var
-    %param:ptr<function, i32, read_write> = var
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %27:vec4<f32> = load %gl_FragCoord
-    %28:vec2<f32> = swizzle %27, xy
-    %29:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %30:vec2<f32> = load %29
-    %31:vec2<f32> = div %28, %30
-    store %lin, %31
-    %32:vec2<f32> = load %lin
-    %33:vec2<f32> = mul %32, 8.0f
-    %34:vec2<f32> = floor %33
-    store %lin, %34
-    %35:f32 = load_vector_element %lin, 0u
-    %36:i32 = call %tint_f32_to_i32, %35
-    %38:i32 = mul %36, 8i
-    %39:i32 = let %38
-    %40:f32 = load_vector_element %lin, 1u
-    %41:i32 = call %tint_f32_to_i32, %40
-    %42:i32 = add %39, %41
-    store %v_1, %42
-    %43:i32 = load %v_1
-    store %param, %43
-    %44:i32 = call %collatz_i1_, %param
-    %x_80:i32 = let %44
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %46:i32 = call %tint_mod_i32, %x_80, 16i
-    %48:ptr<function, vec4<f32>, read_write> = access %indexable, %46
-    %49:vec4<f32> = load %48
-    store %x_GLF_color, %49
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B10: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %52:void = call %main_1
-    %53:vec4<f32> = load %x_GLF_color
-    %54:main_out = construct %53
-    ret %54
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B11: {
-    %57:bool = eq %rhs, 0i
-    %58:bool = eq %lhs, -2147483648i
-    %59:bool = eq %rhs, -1i
-    %60:bool = and %58, %59
-    %61:bool = or %57, %60
-    %62:i32 = select %rhs, 1i, %61
-    %63:i32 = div %lhs, %62
-    ret %63
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B12: {
-    %66:bool = eq %rhs_1, 0i
-    %67:bool = eq %lhs_1, -2147483648i
-    %68:bool = eq %rhs_1, -1i
-    %69:bool = and %67, %68
-    %70:bool = or %66, %69
-    %71:i32 = select %rhs_1, 1i, %70
-    %72:i32 = let %71
-    %73:i32 = div %lhs_1, %72
-    %74:i32 = mul %73, %72
-    %75:i32 = sub %lhs_1, %74
-    ret %75
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B13: {
-    %77:i32 = convert %value
-    %78:bool = gte %value, -2147483648.0f
-    %79:i32 = select -2147483648i, %77, %78
-    %80:bool = lte %value, 2147483520.0f
-    %81:i32 = select 2147483647i, %79, %80
-    ret %81
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.ir.msl
deleted file mode 100644
index 53042c0..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-collatz-push-constant-with-nested-min-max/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,168 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%collatz_i1_ = func(%v:ptr<function, i32, read_write>):i32 {
-  $B2: {
-    %count:ptr<function, i32, read_write> = var
-    store %count, 0i
-    loop [b: $B3, c: $B4] {  # loop_1
-      $B3: {  # body
-        %7:i32 = load %v
-        %x_89:i32 = let %7
-        %9:bool = gt %x_89, 1i
-        if %9 [t: $B5, f: $B6] {  # if_1
-          $B5: {  # true
-            exit_if  # if_1
-          }
-          $B6: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %10:i32 = load %v
-        %x_92:i32 = let %10
-        %12:i32 = and %x_92, 1i
-        %13:bool = eq %12, 1i
-        if %13 [t: $B7, f: $B8] {  # if_2
-          $B7: {  # true
-            %14:i32 = load %v
-            %x_98:i32 = let %14
-            %16:i32 = mul 3i, %x_98
-            %17:i32 = add %16, 1i
-            store %v, %17
-            exit_if  # if_2
-          }
-          $B8: {  # false
-            %18:i32 = load %v
-            %x_101:i32 = let %18
-            %20:i32 = call %tint_div_i32, %x_101, 2i
-            store %v, %20
-            exit_if  # if_2
-          }
-        }
-        %22:i32 = load %count
-        %x_103:i32 = let %22
-        %24:i32 = add %x_103, 1i
-        store %count, %24
-        continue  # -> $B4
-      }
-      $B4: {  # continuing
-        next_iteration  # -> $B3
-      }
-    }
-    %25:i32 = load %count
-    %x_105:i32 = let %25
-    ret %x_105
-  }
-}
-%main_1 = func():void {
-  $B9: {
-    %lin:ptr<function, vec2<f32>, read_write> = var
-    %v_1:ptr<function, i32, read_write> = var
-    %param:ptr<function, i32, read_write> = var
-    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %32:vec4<f32> = load %gl_FragCoord
-    %x_63:vec4<f32> = let %32
-    %34:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
-    %35:vec2<f32> = load %34
-    %x_66:vec2<f32> = let %35
-    %37:f32 = access %x_63, 0u
-    %38:f32 = access %x_63, 1u
-    %39:vec2<f32> = construct %37, %38
-    %40:vec2<f32> = div %39, %x_66
-    store %lin, %40
-    %41:vec2<f32> = load %lin
-    %x_68:vec2<f32> = let %41
-    %43:vec2<f32> = mul %x_68, 8.0f
-    %44:vec2<f32> = floor %43
-    store %lin, %44
-    %45:f32 = load_vector_element %lin, 0u
-    %x_72:f32 = let %45
-    %47:f32 = load_vector_element %lin, 1u
-    %x_76:f32 = let %47
-    %49:i32 = call %tint_f32_to_i32, %x_72
-    %51:i32 = mul %49, 8i
-    %52:i32 = let %51
-    %53:i32 = call %tint_f32_to_i32, %x_76
-    %54:i32 = add %52, %53
-    store %v_1, %54
-    %55:i32 = load %v_1
-    %x_79:i32 = let %55
-    store %param, %x_79
-    %57:i32 = call %collatz_i1_, %param
-    %x_80:i32 = let %57
-    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-    %59:i32 = call %tint_mod_i32, %x_80, 16i
-    %61:ptr<function, vec4<f32>, read_write> = access %indexable, %59
-    %62:vec4<f32> = load %61
-    %x_83:vec4<f32> = let %62
-    store %x_GLF_color, %x_83
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B10: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %66:void = call %main_1
-    %67:vec4<f32> = load %x_GLF_color
-    %68:main_out = construct %67
-    ret %68
-  }
-}
-%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B11: {
-    %71:bool = eq %rhs, 0i
-    %72:bool = eq %lhs, -2147483648i
-    %73:bool = eq %rhs, -1i
-    %74:bool = and %72, %73
-    %75:bool = or %71, %74
-    %76:i32 = select %rhs, 1i, %75
-    %77:i32 = div %lhs, %76
-    ret %77
-  }
-}
-%tint_mod_i32 = func(%lhs_1:i32, %rhs_1:i32):i32 {  # %lhs_1: 'lhs', %rhs_1: 'rhs'
-  $B12: {
-    %80:bool = eq %rhs_1, 0i
-    %81:bool = eq %lhs_1, -2147483648i
-    %82:bool = eq %rhs_1, -1i
-    %83:bool = and %81, %82
-    %84:bool = or %80, %83
-    %85:i32 = select %rhs_1, 1i, %84
-    %86:i32 = let %85
-    %87:i32 = div %lhs_1, %86
-    %88:i32 = mul %87, %86
-    %89:i32 = sub %lhs_1, %88
-    ret %89
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B13: {
-    %91:i32 = convert %value
-    %92:bool = gte %value, -2147483648.0f
-    %93:i32 = select -2147483648i, %91, %92
-    %94:bool = lte %value, 2147483520.0f
-    %95:i32 = select 2147483647i, %93, %94
-    ret %95
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.ir.msl
deleted file mode 100644
index 2440ec1..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,234 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_20:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool {
-  $B2: {
-    %7:f32 = load_vector_element %pos, 0u
-    %8:f32 = load_vector_element %quad, 0u
-    %9:bool = lt %7, %8
-    if %9 [t: $B3] {  # if_1
-      $B3: {  # true
-        ret false
-      }
-    }
-    %10:f32 = load_vector_element %pos, 1u
-    %11:f32 = load_vector_element %quad, 1u
-    %12:bool = lt %10, %11
-    if %12 [t: $B4] {  # if_2
-      $B4: {  # true
-        ret false
-      }
-    }
-    %13:f32 = load_vector_element %pos, 0u
-    %14:f32 = load_vector_element %quad, 0u
-    %15:f32 = load_vector_element %quad, 2u
-    %16:f32 = add %14, %15
-    %17:bool = gt %13, %16
-    if %17 [t: $B5] {  # if_3
-      $B5: {  # true
-        ret false
-      }
-    }
-    %18:f32 = load_vector_element %pos, 1u
-    %19:f32 = load_vector_element %quad, 1u
-    %20:f32 = load_vector_element %quad, 3u
-    %21:f32 = add %19, %20
-    %22:bool = gt %18, %21
-    if %22 [t: $B6] {  # if_4
-      $B6: {  # true
-        ret false
-      }
-    }
-    ret true
-  }
-}
-%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> {
-  $B7: {
-    %res:ptr<function, vec4<f32>, read_write> = var
-    %x_144:ptr<function, f32, read_write> = var
-    %x_145:ptr<function, f32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %param:ptr<function, vec2<f32>, read_write> = var
-    %param_1:ptr<function, vec4<f32>, read_write> = var
-    %indexable:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %indexable_1:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %indexable_2:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %35:f32 = load_vector_element %gl_FragCoord, 0u
-    %36:bool = lt %35, 0.0f
-    if %36 [t: $B8, f: $B9] {  # if_5
-      $B8: {  # true
-        store %x_144, -1.0f
-        exit_if  # if_5
-      }
-      $B9: {  # false
-        %37:f32 = load_vector_element %gl_FragCoord, 0u
-        %38:bool = gte %37, 0.0f
-        if %38 [t: $B10, f: $B11] {  # if_6
-          $B10: {  # true
-            %39:f32 = load_vector_element %gl_FragCoord, 0u
-            %40:bool = gte %39, 0.0f
-            %41:f32 = select 1.0f, 0.5f, %40
-            store %x_145, %41
-            exit_if  # if_6
-          }
-          $B11: {  # false
-            store %x_145, 1.0f
-            exit_if  # if_6
-          }
-        }
-        %42:f32 = load %x_145
-        %43:f32 = min %42, 0.5f
-        store %x_144, %43
-        exit_if  # if_5
-      }
-    }
-    %44:f32 = load %x_144
-    %45:f32 = clamp 0.5f, 0.5f, %44
-    %46:vec4<f32> = construct %45, 0.5f, 1.0f, 1.0f
-    store %res, %46
-    store %i, 0i
-    loop [b: $B12, c: $B13] {  # loop_1
-      $B12: {  # body
-        %47:i32 = load %i
-        %48:bool = lt %47, 8i
-        if %48 [t: $B14, f: $B15] {  # if_7
-          $B14: {  # true
-            exit_if  # if_7
-          }
-          $B15: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %49:i32 = load %i
-        %x_174:i32 = let %49
-        %51:vec2<f32> = load %pos_1
-        store %param, %51
-        store %indexable, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-        %52:ptr<function, vec4<f32>, read_write> = access %indexable, %x_174
-        %53:vec4<f32> = load %52
-        store %param_1, %53
-        %54:bool = call %collision_vf2_vf4_, %param, %param_1
-        %x_178:bool = let %54
-        if %x_178 [t: $B16] {  # if_8
-          $B16: {  # true
-            %56:i32 = load %i
-            %x_181:i32 = let %56
-            store %indexable_1, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %58:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_181
-            %59:f32 = load_vector_element %58, 0u
-            %x_183:f32 = let %59
-            %61:i32 = load %i
-            %x_185:i32 = let %61
-            store %indexable_2, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %63:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_185
-            %64:f32 = load_vector_element %63, 1u
-            %x_187:f32 = let %64
-            %66:i32 = load %i
-            %x_190:i32 = let %66
-            store %indexable_3, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %68:i32 = call %tint_f32_to_i32, %x_183
-            %70:i32 = let %68
-            %71:i32 = call %tint_f32_to_i32, %x_187
-            %72:i32 = mul %70, %71
-            %73:i32 = mul %x_190, 9i
-            %74:i32 = add %72, %73
-            %75:i32 = add %74, 11i
-            %76:i32 = call %tint_mod_i32, %75, 16i
-            %78:ptr<function, vec4<f32>, read_write> = access %indexable_3, %76
-            %79:vec4<f32> = load %78
-            store %res, %79
-            exit_if  # if_8
-          }
-        }
-        continue  # -> $B13
-      }
-      $B13: {  # continuing
-        %80:i32 = load %i
-        %81:i32 = add %80, 1i
-        store %i, %81
-        next_iteration  # -> $B12
-      }
-    }
-    %82:vec4<f32> = load %res
-    %x_199:vec4<f32> = let %82
-    ret %x_199
-  }
-}
-%main_1 = func():void {
-  $B17: {
-    %lin:ptr<function, vec2<f32>, read_write> = var
-    %param_2:ptr<function, vec2<f32>, read_write> = var
-    %87:vec4<f32> = load %gl_FragCoord
-    %88:vec2<f32> = swizzle %87, xy
-    %89:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %90:vec2<f32> = load %89
-    %91:vec2<f32> = div %88, %90
-    store %lin, %91
-    %92:vec2<f32> = load %lin
-    %93:vec2<f32> = mul %92, 32.0f
-    %94:vec2<f32> = floor %93
-    store %lin, %94
-    %95:vec2<f32> = load %lin
-    store %param_2, %95
-    %96:vec4<f32> = call %match_vf2_, %param_2
-    %x_107:vec4<f32> = let %96
-    store %x_GLF_color, %x_107
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B18: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %100:void = call %main_1
-    %101:vec4<f32> = load %x_GLF_color
-    %102:main_out = construct %101
-    ret %102
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B19: {
-    %105:bool = eq %rhs, 0i
-    %106:bool = eq %lhs, -2147483648i
-    %107:bool = eq %rhs, -1i
-    %108:bool = and %106, %107
-    %109:bool = or %105, %108
-    %110:i32 = select %rhs, 1i, %109
-    %111:i32 = let %110
-    %112:i32 = div %lhs, %111
-    %113:i32 = mul %112, %111
-    %114:i32 = sub %lhs, %113
-    ret %114
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B20: {
-    %116:i32 = convert %value
-    %117:bool = gte %value, -2147483648.0f
-    %118:i32 = select -2147483648i, %116, %117
-    %119:bool = lte %value, 2147483520.0f
-    %120:i32 = select 2147483647i, %118, %119
-    ret %120
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.ir.msl
deleted file mode 100644
index 435e6f5..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/stable-rects-vec4-clamp-conditional-min-mix/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,260 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
-  resolution:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %x_20:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%collision_vf2_vf4_ = func(%pos:ptr<function, vec2<f32>, read_write>, %quad:ptr<function, vec4<f32>, read_write>):bool {
-  $B2: {
-    %7:f32 = load_vector_element %pos, 0u
-    %x_110:f32 = let %7
-    %9:f32 = load_vector_element %quad, 0u
-    %x_112:f32 = let %9
-    %11:bool = lt %x_110, %x_112
-    if %11 [t: $B3] {  # if_1
-      $B3: {  # true
-        ret false
-      }
-    }
-    %12:f32 = load_vector_element %pos, 1u
-    %x_117:f32 = let %12
-    %14:f32 = load_vector_element %quad, 1u
-    %x_119:f32 = let %14
-    %16:bool = lt %x_117, %x_119
-    if %16 [t: $B4] {  # if_2
-      $B4: {  # true
-        ret false
-      }
-    }
-    %17:f32 = load_vector_element %pos, 0u
-    %x_124:f32 = let %17
-    %19:f32 = load_vector_element %quad, 0u
-    %x_126:f32 = let %19
-    %21:f32 = load_vector_element %quad, 2u
-    %x_128:f32 = let %21
-    %23:f32 = add %x_126, %x_128
-    %24:bool = gt %x_124, %23
-    if %24 [t: $B5] {  # if_3
-      $B5: {  # true
-        ret false
-      }
-    }
-    %25:f32 = load_vector_element %pos, 1u
-    %x_134:f32 = let %25
-    %27:f32 = load_vector_element %quad, 1u
-    %x_136:f32 = let %27
-    %29:f32 = load_vector_element %quad, 3u
-    %x_138:f32 = let %29
-    %31:f32 = add %x_136, %x_138
-    %32:bool = gt %x_134, %31
-    if %32 [t: $B6] {  # if_4
-      $B6: {  # true
-        ret false
-      }
-    }
-    ret true
-  }
-}
-%match_vf2_ = func(%pos_1:ptr<function, vec2<f32>, read_write>):vec4<f32> {
-  $B7: {
-    %res:ptr<function, vec4<f32>, read_write> = var
-    %x_144:ptr<function, f32, read_write> = var
-    %x_145:ptr<function, f32, read_write> = var
-    %i:ptr<function, i32, read_write> = var
-    %param:ptr<function, vec2<f32>, read_write> = var
-    %param_1:ptr<function, vec4<f32>, read_write> = var
-    %indexable:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %indexable_1:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %indexable_2:ptr<function, array<vec4<f32>, 8>, read_write> = var
-    %indexable_3:ptr<function, array<vec4<f32>, 16>, read_write> = var
-    %45:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_147:f32 = let %45
-    %47:bool = lt %x_147, 0.0f
-    if %47 [t: $B8, f: $B9] {  # if_5
-      $B8: {  # true
-        store %x_144, -1.0f
-        exit_if  # if_5
-      }
-      $B9: {  # false
-        %48:f32 = load_vector_element %gl_FragCoord, 0u
-        %x_153:f32 = let %48
-        %50:bool = gte %x_153, 0.0f
-        if %50 [t: $B10, f: $B11] {  # if_6
-          $B10: {  # true
-            %51:f32 = load_vector_element %gl_FragCoord, 0u
-            %x_159:f32 = let %51
-            %53:bool = gte %x_159, 0.0f
-            %54:f32 = select 1.0f, 0.5f, %53
-            store %x_145, %54
-            exit_if  # if_6
-          }
-          $B11: {  # false
-            store %x_145, 1.0f
-            exit_if  # if_6
-          }
-        }
-        %55:f32 = load %x_145
-        %x_162:f32 = let %55
-        %57:f32 = min %x_162, 0.5f
-        store %x_144, %57
-        exit_if  # if_5
-      }
-    }
-    %58:f32 = load %x_144
-    %x_164:f32 = let %58
-    %60:f32 = clamp 0.5f, 0.5f, %x_164
-    %61:vec4<f32> = construct %60, 0.5f, 1.0f, 1.0f
-    store %res, %61
-    store %i, 0i
-    loop [b: $B12, c: $B13] {  # loop_1
-      $B12: {  # body
-        %62:i32 = load %i
-        %x_171:i32 = let %62
-        %64:bool = lt %x_171, 8i
-        if %64 [t: $B14, f: $B15] {  # if_7
-          $B14: {  # true
-            exit_if  # if_7
-          }
-          $B15: {  # false
-            exit_loop  # loop_1
-          }
-        }
-        %65:i32 = load %i
-        %x_174:i32 = let %65
-        %67:vec2<f32> = load %pos_1
-        %x_175:vec2<f32> = let %67
-        store %param, %x_175
-        store %indexable, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-        %69:ptr<function, vec4<f32>, read_write> = access %indexable, %x_174
-        %70:vec4<f32> = load %69
-        %x_177:vec4<f32> = let %70
-        store %param_1, %x_177
-        %72:bool = call %collision_vf2_vf4_, %param, %param_1
-        %x_178:bool = let %72
-        if %x_178 [t: $B16] {  # if_8
-          $B16: {  # true
-            %74:i32 = load %i
-            %x_181:i32 = let %74
-            store %indexable_1, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %76:ptr<function, vec4<f32>, read_write> = access %indexable_1, %x_181
-            %77:f32 = load_vector_element %76, 0u
-            %x_183:f32 = let %77
-            %79:i32 = load %i
-            %x_185:i32 = let %79
-            store %indexable_2, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
-            %81:ptr<function, vec4<f32>, read_write> = access %indexable_2, %x_185
-            %82:f32 = load_vector_element %81, 1u
-            %x_187:f32 = let %82
-            %84:i32 = load %i
-            %x_190:i32 = let %84
-            store %indexable_3, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
-            %86:i32 = call %tint_f32_to_i32, %x_183
-            %88:i32 = let %86
-            %89:i32 = call %tint_f32_to_i32, %x_187
-            %90:i32 = mul %88, %89
-            %91:i32 = mul %x_190, 9i
-            %92:i32 = add %90, %91
-            %93:i32 = add %92, 11i
-            %94:i32 = call %tint_mod_i32, %93, 16i
-            %96:ptr<function, vec4<f32>, read_write> = access %indexable_3, %94
-            %97:vec4<f32> = load %96
-            %x_196:vec4<f32> = let %97
-            store %res, %x_196
-            exit_if  # if_8
-          }
-        }
-        continue  # -> $B13
-      }
-      $B13: {  # continuing
-        %99:i32 = load %i
-        %x_197:i32 = let %99
-        %101:i32 = add %x_197, 1i
-        store %i, %101
-        next_iteration  # -> $B12
-      }
-    }
-    %102:vec4<f32> = load %res
-    %x_199:vec4<f32> = let %102
-    ret %x_199
-  }
-}
-%main_1 = func():void {
-  $B17: {
-    %lin:ptr<function, vec2<f32>, read_write> = var
-    %param_2:ptr<function, vec2<f32>, read_write> = var
-    %107:vec4<f32> = load %gl_FragCoord
-    %x_98:vec4<f32> = let %107
-    %109:ptr<uniform, vec2<f32>, read> = access %x_20, 0u
-    %110:vec2<f32> = load %109
-    %x_101:vec2<f32> = let %110
-    %112:f32 = access %x_98, 0u
-    %113:f32 = access %x_98, 1u
-    %114:vec2<f32> = construct %112, %113
-    %115:vec2<f32> = div %114, %x_101
-    store %lin, %115
-    %116:vec2<f32> = load %lin
-    %x_103:vec2<f32> = let %116
-    %118:vec2<f32> = mul %x_103, 32.0f
-    %119:vec2<f32> = floor %118
-    store %lin, %119
-    %120:vec2<f32> = load %lin
-    %x_106:vec2<f32> = let %120
-    store %param_2, %x_106
-    %122:vec4<f32> = call %match_vf2_, %param_2
-    %x_107:vec4<f32> = let %122
-    store %x_GLF_color, %x_107
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B18: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %126:void = call %main_1
-    %127:vec4<f32> = load %x_GLF_color
-    %128:main_out = construct %127
-    ret %128
-  }
-}
-%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
-  $B19: {
-    %131:bool = eq %rhs, 0i
-    %132:bool = eq %lhs, -2147483648i
-    %133:bool = eq %rhs, -1i
-    %134:bool = and %132, %133
-    %135:bool = or %131, %134
-    %136:i32 = select %rhs, 1i, %135
-    %137:i32 = let %136
-    %138:i32 = div %lhs, %137
-    %139:i32 = mul %138, %137
-    %140:i32 = sub %lhs, %139
-    ret %140
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B20: {
-    %142:i32 = convert %value
-    %143:bool = gte %value, -2147483648.0f
-    %144:i32 = select -2147483648i, %142, %143
-    %145:bool = lte %value, 2147483520.0f
-    %146:i32 = select 2147483647i, %144, %145
-    ret %146
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.ir.msl
deleted file mode 100644
index bdc7c2e..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/struct-array-index/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,94 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: struct_base = struct @align(4) {
-  data:i32 @offset(0)
-  leftIndex:i32 @offset(4)
-  rightIndex:i32 @offset(8)
-}
-
-buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %struct_array:ptr<private, array<struct_base, 3>, read_write> = var
-  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %index:ptr<function, i32, read_write> = var
-    store %struct_array, array<struct_base, 3>(struct_base(1i))
-    store %index, 1i
-    %6:ptr<private, i32, read_write> = access %struct_array, 1i, 2u
-    store %6, 1i
-    %7:ptr<private, i32, read_write> = access %struct_array, 1i, 1u
-    %8:i32 = load %7
-    %9:bool = eq %8, 1i
-    if %9 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        %10:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %11:f32 = load_vector_element %10, 0u
-        %12:i32 = call %tint_f32_to_i32, %11
-        %14:ptr<private, i32, read_write> = access %struct_array, %12, 2u
-        %15:i32 = load %14
-        store %index, %15
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        %16:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %17:f32 = load_vector_element %16, 1u
-        %18:i32 = call %tint_f32_to_i32, %17
-        %19:ptr<private, i32, read_write> = access %struct_array, %18, 1u
-        %20:i32 = load %19
-        store %index, %20
-        exit_if  # if_1
-      }
-    }
-    %21:ptr<private, i32, read_write> = access %struct_array, 1i, 1u
-    %22:i32 = load %21
-    %23:bool = eq %22, 1i
-    if %23 [t: $B5, f: $B6] {  # if_2
-      $B5: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_2
-      }
-      $B6: {  # false
-        store %x_GLF_color, vec4<f32>(1.0f)
-        exit_if  # if_2
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B7: {
-    %25:void = call %main_1
-    %26:vec4<f32> = load %x_GLF_color
-    %27:main_out = construct %26
-    ret %27
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B8: {
-    %29:i32 = convert %value
-    %30:bool = gte %value, -2147483648.0f
-    %31:i32 = select -2147483648i, %29, %30
-    %32:bool = lte %value, 2147483520.0f
-    %33:i32 = select 2147483647i, %31, %32
-    ret %33
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.ir.msl
deleted file mode 100644
index 3a47ff9..0000000
--- a/test/tint/vk-gl-cts/graphicsfuzz/struct-array-index/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,100 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: struct_base = struct @align(4) {
-  data:i32 @offset(0)
-  leftIndex:i32 @offset(4)
-  rightIndex:i32 @offset(8)
-}
-
-buf0 = struct @align(8) {
-  injectionSwitch:vec2<f32> @offset(0)
-}
-
-main_out = struct @align(16) {
-  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
-}
-
-$B1: {  # root
-  %struct_array:ptr<private, array<struct_base, 3>, read_write> = var
-  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
-  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %index:ptr<function, i32, read_write> = var
-    store %struct_array, array<struct_base, 3>(struct_base(1i))
-    store %index, 1i
-    %6:ptr<private, i32, read_write> = access %struct_array, 1i, 2u
-    store %6, 1i
-    %7:ptr<private, i32, read_write> = access %struct_array, 1i, 1u
-    %8:i32 = load %7
-    %x_39:i32 = let %8
-    %10:bool = eq %x_39, 1i
-    if %10 [t: $B3, f: $B4] {  # if_1
-      $B3: {  # true
-        %11:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %12:f32 = load_vector_element %11, 0u
-        %x_45:f32 = let %12
-        %14:i32 = call %tint_f32_to_i32, %x_45
-        %16:ptr<private, i32, read_write> = access %struct_array, %14, 2u
-        %17:i32 = load %16
-        %x_48:i32 = let %17
-        store %index, %x_48
-        exit_if  # if_1
-      }
-      $B4: {  # false
-        %19:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
-        %20:f32 = load_vector_element %19, 1u
-        %x_50:f32 = let %20
-        %22:i32 = call %tint_f32_to_i32, %x_50
-        %23:ptr<private, i32, read_write> = access %struct_array, %22, 1u
-        %24:i32 = load %23
-        %x_53:i32 = let %24
-        store %index, %x_53
-        exit_if  # if_1
-      }
-    }
-    %26:ptr<private, i32, read_write> = access %struct_array, 1i, 1u
-    %27:i32 = load %26
-    %x_55:i32 = let %27
-    %29:bool = eq %x_55, 1i
-    if %29 [t: $B5, f: $B6] {  # if_2
-      $B5: {  # true
-        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
-        exit_if  # if_2
-      }
-      $B6: {  # false
-        store %x_GLF_color, vec4<f32>(1.0f)
-        exit_if  # if_2
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func():main_out {
-  $B7: {
-    %31:void = call %main_1
-    %32:vec4<f32> = load %x_GLF_color
-    %33:main_out = construct %32
-    ret %33
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B8: {
-    %35:i32 = convert %value
-    %36:bool = gte %value, -2147483648.0f
-    %37:i32 = select -2147483648i, %35, %36
-    %38:bool = lte %value, 2147483520.0f
-    %39:i32 = select 2147483647i, %37, %38
-    ret %39
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.ir.msl
deleted file mode 100644
index 5fa0561..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
-  x_4_1:u32 @offset(0), @location(0), @interpolate(flat)
-  gl_Position:vec4<f32> @offset(16), @builtin(position)
-}
-
-$B1: {  # root
-  %x_3:ptr<private, vec2<f32>, read_write> = var
-  %x_4:ptr<private, u32, read_write> = var
-  %gl_Position:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %5:f32 = load_vector_element %x_3, 0u
-    %6:f32 = add %5, 1.02777779102325439453f
-    %7:f32 = mul %6, 18.0f
-    %8:f32 = sub %7, 1.0f
-    %9:u32 = call %tint_f32_to_u32, %8
-    %11:u32 = let %9
-    %12:f32 = load_vector_element %x_3, 1u
-    %13:f32 = add %12, 1.02777779102325439453f
-    %14:f32 = mul %13, 18.0f
-    %15:f32 = sub %14, 1.0f
-    %16:u32 = call %tint_f32_to_u32, %15
-    %17:u32 = mul %16, 36u
-    %18:u32 = add %11, %17
-    store %x_4, %18
-    %19:f32 = load_vector_element %x_3, 0u
-    %20:f32 = load_vector_element %x_3, 1u
-    %21:vec4<f32> = construct %19, %20, 0.0f, 1.0f
-    store %gl_Position, %21
-    ret
-  }
-}
-%tint_symbol = @vertex func(%x_3_param:vec2<f32> [@location(0)]):main_out {
-  $B3: {
-    store %x_3, %x_3_param
-    %24:void = call %main_1
-    %25:u32 = load %x_4
-    %26:vec4<f32> = load %gl_Position
-    %27:main_out = construct %25, %26
-    ret %27
-  }
-}
-%tint_f32_to_u32 = func(%value:f32):u32 {
-  $B4: {
-    %29:u32 = convert %value
-    %30:bool = gte %value, 0.0f
-    %31:u32 = select 0u, %29, %30
-    %32:bool = lte %value, 4294967040.0f
-    %33:u32 = select 4294967295u, %31, %32
-    ret %33
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.ir.msl
deleted file mode 100644
index df8c87a..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/float32/comparison/frexpstruct_1_frag/0.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(16) {
-  x_4_1:u32 @offset(0), @location(0), @interpolate(flat)
-  gl_Position:vec4<f32> @offset(16), @builtin(position)
-}
-
-$B1: {  # root
-  %x_3:ptr<private, vec2<f32>, read_write> = var
-  %x_4:ptr<private, u32, read_write> = var
-  %gl_Position:ptr<private, vec4<f32>, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %5:f32 = load_vector_element %x_3, 0u
-    %x_30:f32 = let %5
-    %7:f32 = load_vector_element %x_3, 1u
-    %x_36:f32 = let %7
-    %9:f32 = add %x_30, 1.02777779102325439453f
-    %10:f32 = mul %9, 18.0f
-    %11:f32 = sub %10, 1.0f
-    %12:u32 = call %tint_f32_to_u32, %11
-    %14:u32 = let %12
-    %15:f32 = add %x_36, 1.02777779102325439453f
-    %16:f32 = mul %15, 18.0f
-    %17:f32 = sub %16, 1.0f
-    %18:u32 = call %tint_f32_to_u32, %17
-    %19:u32 = mul %18, 36u
-    %20:u32 = add %14, %19
-    store %x_4, %20
-    %21:vec2<f32> = load %x_3
-    %x_43:vec2<f32> = let %21
-    %23:f32 = access %x_43, 0u
-    %24:f32 = access %x_43, 1u
-    %25:vec4<f32> = construct %23, %24, 0.0f, 1.0f
-    store %gl_Position, %25
-    ret
-  }
-}
-%tint_symbol = @vertex func(%x_3_param:vec2<f32> [@location(0)]):main_out {
-  $B3: {
-    store %x_3, %x_3_param
-    %28:void = call %main_1
-    %29:u32 = load %x_4
-    %30:vec4<f32> = load %gl_Position
-    %31:main_out = construct %29, %30
-    ret %31
-  }
-}
-%tint_f32_to_u32 = func(%value:f32):u32 {
-  $B4: {
-    %33:u32 = convert %value
-    %34:bool = gte %value, 0.0f
-    %35:u32 = select 0u, %33, %34
-    %36:bool = lte %value, 4294967040.0f
-    %37:u32 = select 4294967295u, %35, %36
-    ret %37
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.ir.msl
deleted file mode 100644
index 96f0c80..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,65 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %5:f32 = load_vector_element %x_2, 0u
-    %6:i32 = call %tint_f32_to_i32, %5
-    %8:i32 = and %6, 1i
-    %9:i32 = let %8
-    %10:f32 = load_vector_element %x_2, 1u
-    %11:i32 = call %tint_f32_to_i32, %10
-    %12:i32 = and %11, 1i
-    %13:i32 = add %9, %12
-    %14:i32 = load %x_3
-    %15:i32 = add %13, %14
-    %16:i32 = let %15
-    %17:f32 = load_vector_element %x_2, 2u
-    %18:i32 = call %tint_f32_to_i32, %17
-    %19:bool = eq %16, %18
-    if %19 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    store %x_4, 1i
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %23:void = call %main_1
-    %24:i32 = load %x_4
-    %25:main_out = construct %24
-    ret %25
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %27:i32 = convert %value
-    %28:bool = gte %value, -2147483648.0f
-    %29:i32 = select -2147483648i, %27, %28
-    %30:bool = lte %value, 2147483520.0f
-    %31:i32 = select 2147483647i, %29, %30
-    ret %31
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.ir.msl
deleted file mode 100644
index 118798a..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %5:vec4<f32> = load %x_2
-    %x_16:vec4<f32> = let %5
-    %7:i32 = load %x_3
-    %x_26:i32 = let %7
-    %9:f32 = access %x_16, 0u
-    %10:i32 = call %tint_f32_to_i32, %9
-    %12:i32 = and %10, 1i
-    %13:i32 = let %12
-    %14:f32 = access %x_16, 1u
-    %15:i32 = call %tint_f32_to_i32, %14
-    %16:i32 = and %15, 1i
-    %17:i32 = add %13, %16
-    %18:i32 = add %17, %x_26
-    %19:i32 = let %18
-    %20:f32 = access %x_16, 2u
-    %21:i32 = call %tint_f32_to_i32, %20
-    %22:bool = eq %19, %21
-    if %22 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    store %x_4, 1i
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %26:void = call %main_1
-    %27:i32 = load %x_4
-    %28:main_out = construct %27
-    ret %28
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %30:i32 = convert %value
-    %31:bool = gte %value, -2147483648.0f
-    %32:i32 = select -2147483648i, %30, %31
-    %33:bool = lte %value, 2147483520.0f
-    %34:i32 = select 2147483647i, %32, %33
-    ret %34
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.ir.msl
deleted file mode 100644
index 7c69af4..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,60 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  out_data_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %out_data:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_is_odd:ptr<function, bool, read_write> = var
-    %y_is_odd:ptr<function, bool, read_write> = var
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %7:i32 = call %tint_f32_to_i32, %6
-    %9:i32 = and %7, 1i
-    %10:bool = eq %9, 1i
-    store %x_is_odd, %10
-    %11:f32 = load_vector_element %gl_FragCoord, 1u
-    %12:i32 = call %tint_f32_to_i32, %11
-    %13:i32 = and %12, 1i
-    %14:bool = eq %13, 1i
-    store %y_is_odd, %14
-    %15:bool = load %x_is_odd
-    %16:bool = load %y_is_odd
-    %17:bool = or %15, %16
-    %18:i32 = select 0i, 1i, %17
-    store %out_data, %18
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B3: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %21:void = call %main_1
-    %22:i32 = load %out_data
-    %23:main_out = construct %22
-    ret %23
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B4: {
-    %25:i32 = convert %value
-    %26:bool = gte %value, -2147483648.0f
-    %27:i32 = select -2147483648i, %25, %26
-    %28:bool = lte %value, 2147483520.0f
-    %29:i32 = select 2147483647i, %27, %28
-    ret %29
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.ir.msl
deleted file mode 100644
index cdd96cd..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write/2-opt.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,64 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  out_data_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
-  %out_data:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_is_odd:ptr<function, bool, read_write> = var
-    %y_is_odd:ptr<function, bool, read_write> = var
-    %6:f32 = load_vector_element %gl_FragCoord, 0u
-    %x_24:f32 = let %6
-    %8:i32 = call %tint_f32_to_i32, %x_24
-    %10:i32 = and %8, 1i
-    %11:bool = eq %10, 1i
-    store %x_is_odd, %11
-    %12:f32 = load_vector_element %gl_FragCoord, 1u
-    %x_29:f32 = let %12
-    %14:i32 = call %tint_f32_to_i32, %x_29
-    %15:i32 = and %14, 1i
-    %16:bool = eq %15, 1i
-    store %y_is_odd, %16
-    %17:bool = load %x_is_odd
-    %x_33:bool = let %17
-    %19:bool = load %y_is_odd
-    %x_34:bool = let %19
-    %21:bool = or %x_33, %x_34
-    %22:i32 = select 0i, 1i, %21
-    store %out_data, %22
-    ret
-  }
-}
-%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
-  $B3: {
-    store %gl_FragCoord, %gl_FragCoord_param
-    %25:void = call %main_1
-    %26:i32 = load %out_data
-    %27:main_out = construct %26
-    ret %27
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B4: {
-    %29:i32 = convert %value
-    %30:bool = gte %value, -2147483648.0f
-    %31:i32 = select -2147483648i, %29, %30
-    %32:bool = lte %value, 2147483520.0f
-    %33:i32 = select 2147483647i, %31, %32
-    ret %33
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.ir.msl
deleted file mode 100644
index eb52e3c..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %5:vec4<f32> = load %x_2
-    %x_16:vec4<f32> = let %5
-    %7:i32 = load %x_3
-    %x_26:i32 = let %7
-    store %x_4, 1i
-    %9:f32 = access %x_16, 0u
-    %10:i32 = call %tint_f32_to_i32, %9
-    %12:i32 = and %10, 1i
-    %13:i32 = let %12
-    %14:f32 = access %x_16, 1u
-    %15:i32 = call %tint_f32_to_i32, %14
-    %16:i32 = and %15, 1i
-    %17:i32 = add %13, %16
-    %18:i32 = add %17, %x_26
-    %19:i32 = let %18
-    %20:f32 = access %x_16, 2u
-    %21:i32 = call %tint_f32_to_i32, %20
-    %22:bool = eq %19, %21
-    if %22 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %26:void = call %main_1
-    %27:i32 = load %x_4
-    %28:main_out = construct %27
-    ret %28
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %30:i32 = convert %value
-    %31:bool = gte %value, -2147483648.0f
-    %32:i32 = select -2147483648i, %30, %31
-    %33:bool = lte %value, 2147483520.0f
-    %34:i32 = select 2147483647i, %32, %33
-    ret %34
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.ir.msl
deleted file mode 100644
index eb52e3c..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_output_write_before_terminate/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,68 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %5:vec4<f32> = load %x_2
-    %x_16:vec4<f32> = let %5
-    %7:i32 = load %x_3
-    %x_26:i32 = let %7
-    store %x_4, 1i
-    %9:f32 = access %x_16, 0u
-    %10:i32 = call %tint_f32_to_i32, %9
-    %12:i32 = and %10, 1i
-    %13:i32 = let %12
-    %14:f32 = access %x_16, 1u
-    %15:i32 = call %tint_f32_to_i32, %14
-    %16:i32 = and %15, 1i
-    %17:i32 = add %13, %16
-    %18:i32 = add %17, %x_26
-    %19:i32 = let %18
-    %20:f32 = access %x_16, 2u
-    %21:i32 = call %tint_f32_to_i32, %20
-    %22:bool = eq %19, %21
-    if %22 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %26:void = call %main_1
-    %27:i32 = load %x_4
-    %28:main_out = construct %27
-    ret %28
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %30:i32 = convert %value
-    %31:bool = gte %value, -2147483648.0f
-    %32:i32 = select -2147483648i, %30, %31
-    %33:bool = lte %value, 2147483520.0f
-    %34:i32 = select 2147483647i, %32, %33
-    ret %34
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.ir.msl
deleted file mode 100644
index 13659a2..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,75 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
-  field0:array<i32> @offset(0)
-}
-
-main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-  %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
-}
-
-%main_1 = func():void {
-  $B2: {
-    store %x_4, 1i
-    %6:f32 = load_vector_element %x_2, 0u
-    %7:i32 = call %tint_f32_to_i32, %6
-    %x_27:i32 = let %7
-    %10:f32 = load_vector_element %x_2, 1u
-    %11:i32 = call %tint_f32_to_i32, %10
-    %x_28:i32 = let %11
-    %13:i32 = and %x_27, 1i
-    %14:i32 = and %x_28, 1i
-    %15:i32 = add %13, %14
-    %16:i32 = load %x_3
-    %17:i32 = add %15, %16
-    %18:i32 = let %17
-    %19:f32 = load_vector_element %x_2, 2u
-    %20:i32 = call %tint_f32_to_i32, %19
-    %21:bool = eq %18, %20
-    if %21 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    %22:i32 = mul %x_28, 8i
-    %23:i32 = add %x_27, %22
-    %24:ptr<storage, i32, read_write> = access %x_5, 0u, %23
-    store %24, %x_27
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %28:void = call %main_1
-    %29:i32 = load %x_4
-    %30:main_out = construct %29
-    ret %30
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %32:i32 = convert %value
-    %33:bool = gte %value, -2147483648.0f
-    %34:i32 = select -2147483648i, %32, %33
-    %35:bool = lte %value, 2147483520.0f
-    %36:i32 = select 2147483647i, %34, %35
-    ret %36
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.ir.msl
deleted file mode 100644
index e359fb6..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/no_ssbo_store/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
-  field0:array<i32> @offset(0)
-}
-
-main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-  %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
-}
-
-%main_1 = func():void {
-  $B2: {
-    store %x_4, 1i
-    %6:vec4<f32> = load %x_2
-    %x_23:vec4<f32> = let %6
-    %8:f32 = access %x_23, 0u
-    %9:i32 = call %tint_f32_to_i32, %8
-    %x_27:i32 = let %9
-    %12:f32 = access %x_23, 1u
-    %13:i32 = call %tint_f32_to_i32, %12
-    %x_28:i32 = let %13
-    %15:i32 = load %x_3
-    %x_33:i32 = let %15
-    %17:i32 = and %x_27, 1i
-    %18:i32 = and %x_28, 1i
-    %19:i32 = add %17, %18
-    %20:i32 = add %19, %x_33
-    %21:f32 = access %x_23, 2u
-    %22:i32 = call %tint_f32_to_i32, %21
-    %23:bool = eq %20, %22
-    if %23 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    %24:i32 = mul %x_28, 8i
-    %25:i32 = add %x_27, %24
-    %26:ptr<storage, i32, read_write> = access %x_5, 0u, %25
-    store %26, %x_27
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %30:void = call %main_1
-    %31:i32 = load %x_4
-    %32:main_out = construct %31
-    ret %32
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %34:i32 = convert %value
-    %35:bool = gte %value, -2147483648.0f
-    %36:i32 = select -2147483648i, %34, %35
-    %37:bool = lte %value, 2147483520.0f
-    %38:i32 = select 2147483647i, %36, %37
-    ret %38
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.ir.msl
deleted file mode 100644
index ba7eaf9..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
-  field0:array<i32> @offset(0)
-}
-
-main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-  %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
-}
-
-%main_1 = func():void {
-  $B2: {
-    store %x_4, 1i
-    %6:vec4<f32> = load %x_2
-    %x_23:vec4<f32> = let %6
-    %8:f32 = load_vector_element %x_2, 0u
-    %9:i32 = call %tint_f32_to_i32, %8
-    %x_27:i32 = let %9
-    %12:f32 = load_vector_element %x_2, 1u
-    %13:i32 = call %tint_f32_to_i32, %12
-    %x_28:i32 = let %13
-    %15:i32 = load %x_3
-    %x_33:i32 = let %15
-    %17:i32 = mul %x_28, 8i
-    %18:i32 = add %x_27, %17
-    %19:ptr<storage, i32, read_write> = access %x_5, 0u, %18
-    store %19, %x_27
-    %20:i32 = and %x_27, 1i
-    %21:i32 = and %x_28, 1i
-    %22:i32 = add %20, %21
-    %23:i32 = add %22, %x_33
-    %24:f32 = access %x_23, 2u
-    %25:i32 = call %tint_f32_to_i32, %24
-    %26:bool = eq %23, %25
-    if %26 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %30:void = call %main_1
-    %31:i32 = load %x_4
-    %32:main_out = construct %31
-    ret %32
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %34:i32 = convert %value
-    %35:bool = gte %value, -2147483648.0f
-    %36:i32 = select -2147483648i, %34, %35
-    %37:bool = lte %value, 2147483520.0f
-    %38:i32 = select 2147483647i, %36, %37
-    ret %38
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.ir.msl
deleted file mode 100644
index 537fcfa..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/ssbo_store_before_terminate/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,77 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(4) {
-  field0:array<i32> @offset(0)
-}
-
-main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-  %x_5:ptr<storage, S, read_write> = var @binding_point(0, 0)
-}
-
-%main_1 = func():void {
-  $B2: {
-    store %x_4, 1i
-    %6:vec4<f32> = load %x_2
-    %x_23:vec4<f32> = let %6
-    %8:f32 = access %x_23, 0u
-    %9:i32 = call %tint_f32_to_i32, %8
-    %x_27:i32 = let %9
-    %12:f32 = access %x_23, 1u
-    %13:i32 = call %tint_f32_to_i32, %12
-    %x_28:i32 = let %13
-    %15:i32 = load %x_3
-    %x_33:i32 = let %15
-    %17:i32 = mul %x_28, 8i
-    %18:i32 = add %x_27, %17
-    %19:ptr<storage, i32, read_write> = access %x_5, 0u, %18
-    store %19, %x_27
-    %20:i32 = and %x_27, 1i
-    %21:i32 = and %x_28, 1i
-    %22:i32 = add %20, %21
-    %23:i32 = add %22, %x_33
-    %24:f32 = access %x_23, 2u
-    %25:i32 = call %tint_f32_to_i32, %24
-    %26:bool = eq %23, %25
-    if %26 [t: $B3] {  # if_1
-      $B3: {  # true
-        exit_if  # if_1
-      }
-    }
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B4: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %30:void = call %main_1
-    %31:i32 = load %x_4
-    %32:main_out = construct %31
-    ret %32
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B5: {
-    %34:i32 = convert %value
-    %35:bool = gte %value, -2147483648.0f
-    %36:i32 = select -2147483648i, %34, %35
-    %37:bool = lte %value, 2147483520.0f
-    %38:i32 = select 2147483647i, %36, %37
-    ret %38
-  }
-}
-
-unhandled variable address space
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.ir.msl
deleted file mode 100644
index 40c7b84..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.spvasm.expected.ir.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_33:ptr<function, i32, read_write> = var
-    %6:vec4<f32> = load %x_2
-    %x_18:vec4<f32> = let %6
-    %8:i32 = load %x_3
-    %x_28:i32 = let %8
-    store %x_33, 0i
-    %10:f32 = access %x_18, 0u
-    %11:i32 = call %tint_f32_to_i32, %10
-    %13:i32 = and %11, 1i
-    %14:i32 = let %13
-    %15:f32 = access %x_18, 1u
-    %16:i32 = call %tint_f32_to_i32, %15
-    %17:i32 = and %16, 1i
-    %18:i32 = add %14, %17
-    %19:i32 = add %18, %x_28
-    %20:i32 = let %19
-    %21:f32 = access %x_18, 2u
-    %22:i32 = call %tint_f32_to_i32, %21
-    %23:bool = eq %20, %22
-    if %23 [t: $B3] {  # if_1
-      $B3: {  # true
-        loop [b: $B4, c: $B5] {  # loop_1
-          $B4: {  # body
-            %x_34:ptr<function, i32, read_write> = var
-            %25:i32 = load %x_33
-            %26:u32 = bitcast %25
-            %27:bool = lt %26, 10u
-            if %27 [t: $B6, f: $B7] {  # if_2
-              $B6: {  # true
-                exit_if  # if_2
-              }
-              $B7: {  # false
-                exit_loop  # loop_1
-              }
-            }
-            continue  # -> $B5
-          }
-          $B5: {  # continuing
-            %28:i32 = load %x_33
-            %29:i32 = add %28, 1i
-            store %x_34, %29
-            %30:i32 = load %x_34
-            store %x_33, %30
-            next_iteration  # -> $B4
-          }
-        }
-        exit_if  # if_1
-      }
-    }
-    store %x_4, 1i
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B8: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %34:void = call %main_1
-    %35:i32 = load %x_4
-    %36:main_out = construct %35
-    ret %36
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B9: {
-    %38:i32 = convert %value
-    %39:bool = gte %value, -2147483648.0f
-    %40:i32 = select -2147483648i, %38, %39
-    %41:bool = lte %value, 2147483520.0f
-    %42:i32 = select 2147483647i, %40, %41
-    ret %42
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************
diff --git a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.ir.msl b/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.ir.msl
deleted file mode 100644
index 2a16ab4..0000000
--- a/test/tint/vk-gl-cts/spirv_assembly/instruction/terminate_invocation/terminate_loop/1.wgsl.expected.ir.msl
+++ /dev/null
@@ -1,95 +0,0 @@
-SKIP: FAILED
-
-../../src/tint/lang/msl/writer/printer/printer.cc:1257 internal compiler error: main_out = struct @align(4) {
-  x_4_1:i32 @offset(0), @location(0), @interpolate(flat)
-}
-
-$B1: {  # root
-  %x_2:ptr<private, vec4<f32>, read_write> = var
-  %x_3:ptr<private, i32, read_write> = var
-  %x_4:ptr<private, i32, read_write> = var
-}
-
-%main_1 = func():void {
-  $B2: {
-    %x_33_phi:ptr<function, i32, read_write> = var
-    %6:vec4<f32> = load %x_2
-    %x_18:vec4<f32> = let %6
-    %8:i32 = load %x_3
-    %x_28:i32 = let %8
-    store %x_33_phi, 0i
-    %10:f32 = access %x_18, 0u
-    %11:i32 = call %tint_f32_to_i32, %10
-    %13:i32 = and %11, 1i
-    %14:i32 = let %13
-    %15:f32 = access %x_18, 1u
-    %16:i32 = call %tint_f32_to_i32, %15
-    %17:i32 = and %16, 1i
-    %18:i32 = add %14, %17
-    %19:i32 = add %18, %x_28
-    %20:i32 = let %19
-    %21:f32 = access %x_18, 2u
-    %22:i32 = call %tint_f32_to_i32, %21
-    %23:bool = eq %20, %22
-    if %23 [t: $B3] {  # if_1
-      $B3: {  # true
-        loop [b: $B4, c: $B5] {  # loop_1
-          $B4: {  # body
-            %x_34:ptr<function, i32, read_write> = var
-            %25:i32 = load %x_33_phi
-            %x_33:i32 = let %25
-            %27:u32 = bitcast %x_33
-            %28:bool = lt %27, 10u
-            if %28 [t: $B6, f: $B7] {  # if_2
-              $B6: {  # true
-                exit_if  # if_2
-              }
-              $B7: {  # false
-                exit_loop  # loop_1
-              }
-            }
-            continue  # -> $B5
-          }
-          $B5: {  # continuing
-            %29:i32 = add %x_33, 1i
-            store %x_34, %29
-            %30:i32 = load %x_34
-            store %x_33_phi, %30
-            next_iteration  # -> $B4
-          }
-        }
-        exit_if  # if_1
-      }
-    }
-    store %x_4, 1i
-    ret
-  }
-}
-%tint_symbol = @fragment func(%x_2_param:vec4<f32> [@position], %x_3_param:i32 [@location(0), @interpolate(flat)]):main_out {
-  $B8: {
-    store %x_2, %x_2_param
-    store %x_3, %x_3_param
-    %34:void = call %main_1
-    %35:i32 = load %x_4
-    %36:main_out = construct %35
-    ret %36
-  }
-}
-%tint_f32_to_i32 = func(%value:f32):i32 {
-  $B9: {
-    %38:i32 = convert %value
-    %39:bool = gte %value, -2147483648.0f
-    %40:i32 = select -2147483648i, %38, %39
-    %41:bool = lte %value, 2147483520.0f
-    %42:i32 = select 2147483647i, %40, %41
-    ret %42
-  }
-}
-
-invalid entry point IO struct uses
-********************************************************************
-*  The tint shader compiler has encountered an unexpected error.   *
-*                                                                  *
-*  Please help us fix this issue by submitting a bug report at     *
-*  crbug.com/tint with the source program that triggered the bug.  *
-********************************************************************